CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > OpenFOAM Programming & Development

Programming questions

Register Blogs Members List Search Today's Posts Mark Forums Read

Reply
 
LinkBack Thread Tools Display Modes
Old   June 1, 2013, 14:58
Default Programming questions
  #1
New Member
 
Jim KIT
Join Date: Aug 2012
Location: Germany
Posts: 23
Rep Power: 4
sharifi is on a distinguished road
Dear openFoamers,

I want OpenFOAM performs during the parallel simulation "reconstructPar" , so that I can look at the results without problem.
I found a Function " systemCall"

http://openfoamwiki.net/index.php/Ti...ect_systemCall

It looks promising but It can do the commands after a time iteration or/and before the simulation is over. I studied the code (http://foam.sourceforge.net/docs/cpp/a02231.html)
and i didn't find, where it asks for time?
could it have to do with this command "
TypeName ( "systemCall" )"

have anyone any idea ,how can I extend that library to make it able to do the command after (for example) 10 iteration?

thx
sharifi is offline   Reply With Quote

Old   June 1, 2013, 17:46
Default
  #2
Senior Member
 
Tobi's Avatar
 
Tobias Holzmann
Join Date: Oct 2010
Location: Leoben (Austria)
Posts: 1,077
Blog Entries: 4
Rep Power: 19
Tobi will become famous soon enough
Send a message via ICQ to Tobi Send a message via Skype™ to Tobi
Hi,

why don t you use paraview with decomposed case?
There you can have a look at the results too!

easy and good.
Otherwise open a other terminal and use reconstructPar.

Maybe I missunderstood you?!
Tobi is offline   Reply With Quote

Old   June 1, 2013, 18:30
Default
  #3
New Member
 
Jim KIT
Join Date: Aug 2012
Location: Germany
Posts: 23
Rep Power: 4
sharifi is on a distinguished road
Quote:
Originally Posted by Tobi View Post
Hi,

why don t you use paraview with decomposed case?
There you can have a look at the results too!

easy and good.
Otherwise open a other terminal and use reconstructPar.

Maybe I missunderstood you?!
thanks for the answer

the idea is, during the parallel processing in a cluster the result is automatically written out . Thus the effort each time "entering the command reconstructPar" is saved.
sharifi is offline   Reply With Quote

Old   June 4, 2013, 04:47
Default
  #4
New Member
 
Marcel Vonlanthen
Join Date: Nov 2012
Location: Zurich, Switzerland
Posts: 27
Rep Power: 4
Sylv is on a distinguished road
Quote:
Originally Posted by sharifi View Post
thanks for the answer

the idea is, during the parallel processing in a cluster the result is automatically written out . Thus the effort each time "entering the command reconstructPar" is saved.
Hello sharifi,

I am in the same position as you (doing stuff during the parallel run on a cluster). sysCall works really well for such operation. Here is a short example of a python script named "doStuff.py" used by the sysCall function of OpenFOAM:
Code:
# import library
import os
import subprocess

# find master processor and then do something only on this one
if os.environ['OMPI_COMM_WORLD_RANK']=='0':
    # do something directly on the master processor, like reconstruction (not nice)
    proc = subprocess.Popen('reconstructPar -time 1.23', stdout=subprocess.PIPE, shell=True)
    (out, err) = proc.communicate()
    # do something directly on the master processor, like restart a reconstruction job (much clever because you can really do stuffs in parallel)
    proc = subprocess.Popen('qsub myReconstructionJob.sh', stdout=subprocess.PIPE, shell=True)
    (out, err) = proc.communicate()
The environment variable to find the master processor depends on mpi protocol used by your OpenFOAM. My conrtolDict looks like:
Code:
sysCallJobs
{
    type systemCall;
    functionObjectLibs ( "libsystemCall.so" );
    executeCalls 0();
    endCalls 0();
    writeCalls 1("./doStuff.py");
    outputControl outputTime;
}
Sylv is offline   Reply With Quote

Old   June 6, 2013, 12:02
Default
  #5
New Member
 
Jim KIT
Join Date: Aug 2012
Location: Germany
Posts: 23
Rep Power: 4
sharifi is on a distinguished road
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.
sharifi is offline   Reply With Quote

Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
A book for a beginner wanting to learn programming frank Main CFD Forum 9 May 12, 2014 23:15
Programming questions smart OpenFOAM Programming & Development 35 July 9, 2013 09:21
Questions for simple algorithm programming Zhaoxiaobin211 Main CFD Forum 0 January 1, 2013 11:32
two questions about udf programming Vincent FLUENT 1 October 5, 2008 00:24
Programming in C Tony Main CFD Forum 5 March 7, 2002 13:40


All times are GMT -4. The time now is 18:16.