OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
Public Member Functions | Private Member Functions | Private Attributes | List of all members
OpalSimulation Class Reference

Concrete implementation of an Opal simulation wrapper. More...

#include <OpalSimulation.h>

Inheritance diagram for OpalSimulation:
Inheritance graph
[legend]
Collaboration diagram for OpalSimulation:
Collaboration graph
[legend]

Public Member Functions

 OpalSimulation (Expressions::Named_t objectives, Expressions::Named_t constraints, Param_t params, std::string name, MPI_Comm comm, CmdArguments_t args, std::map< std::string, std::string > uvars)
 
virtual ~OpalSimulation ()
 
void run ()
 
std::map< std::string, std::vector< double > > getData (const std::vector< std::string > &statVariables)
 
void collectResults ()
 Parse SDDS stat file and build up requested variable dictionary. More...
 
void cleanUp ()
 
void cleanUp (const std::vector< std::string > &keep)
 remove temporary files except to the ones in 'keep' More...
 
reqVarContainer_t getResults ()
 returns container containing all requested variables with results More...
 
void setFilename (int id)
 set job id (SAMPLE command) More...
 
- Public Member Functions inherited from Simulation
 Simulation (CmdArguments_t args)
 
 ~Simulation ()
 
CmdArguments_t getArgs ()
 
virtual void run ()=0
 
virtual void collectResults ()=0
 
virtual reqVarContainer_t getResults ()=0
 

Private Member Functions

void invalidBunch ()
 mark a solution as invalid More...
 
bool hasResultsAvailable ()
 check if we already have simulated the current set of design vars More...
 
void createSymlink_m (const std::string &path)
 create symbolic links More...
 
void copyH5_m ()
 copy H5 file More...
 
void setupSimulation ()
 create directories, input files, fieldmaps... More...
 
void setupFSStructure ()
 create directories, input files, symlinks... More...
 
void getVariableDictionary (variableDictionary_t &dictionary, const std::string &filename, const Expressions::Expr_t *const expression)
 get variables for expression evaluation from SDDS file. Can throw SDDSParserException More...
 
void redirectOutToFile ()
 redirect stdout and stderr to file More...
 
void restoreOut ()
 restore stdout and stderr to default More...
 

Private Attributes

std::string simulationName_
 identification of the simulation (corresponding to output filename) More...
 
std::string simulationDirName_
 full path of simulation directory (where simulation will be run) More...
 
std::string simTmpDir_
 temporary directory for simulation data (environment var SIMTMPDIR) More...
 
std::string pwd_
 holds current directory (for restoring) More...
 
std::streambuf * strm_buffer_
 stream buffer to redirect output More...
 
std::streambuf * strm_err_
 stream buffer to redirect stderr More...
 
std::map< std::string, std::string > userVariables_
 variable dictionary holding requested optimizer values More...
 
reqVarContainer_t requestedVars_
 holds solutions returned to the optimizer More...
 
Expressions::Named_t objectives_
 
Expressions::Named_t constraints_
 
std::set< std::string > dvarNames_
 
MPI_Comm comm_
 
boost::scoped_ptr< GenerateOpalSimulationgs_
 object to generate simulation input files More...
 
int id_m
 job id (SAMPLE command) More...
 

Detailed Description

Concrete implementation of an Opal simulation wrapper.

See also
http://amas.web.psi.ch

In order to work properly the user must ensure that the environment variables

are specified correctly.

Definition at line 30 of file OpalSimulation.h.

Constructor & Destructor Documentation

◆ OpalSimulation()

OpalSimulation::OpalSimulation ( Expressions::Named_t  objectives,
Expressions::Named_t  constraints,
Param_t  params,
std::string  name,
MPI_Comm  comm,
CmdArguments_t  args,
std::map< std::string, std::string >  uvars 
)

Setup OPAL run.

Parameters
[in]objectivesof the optimization problem
[in]constraintsof the optimization problem
[in]params
[in]nameof the simulation
[in]commMPI communicator used for running the simulation
[in]argscommand line arguments passed to the framework
[in]uvarsdefined in the input file (e.g. REAL a = 1.0)

Definition at line 40 of file OpalSimulation.cpp.

References dvarNames_, endl(), Hypervolume::fs, NativeHashGenerator::generate(), gs_, name, simTmpDir_, simulationDirName_, simulationName_, and userVariables_.

Here is the call graph for this function:

◆ ~OpalSimulation()

OpalSimulation::~OpalSimulation ( )
virtual

Definition at line 137 of file OpalSimulation.cpp.

References requestedVars_, and userVariables_.

Member Function Documentation

◆ cleanUp() [1/2]

void OpalSimulation::cleanUp ( )

remove temporary simulation files (if Boost filesystem library is not available, this call do nothing).

Definition at line 625 of file OpalSimulation.cpp.

References comm_, endl(), Hypervolume::fs, and simulationDirName_.

Referenced by collectResults().

Here is the call graph for this function:

◆ cleanUp() [2/2]

void OpalSimulation::cleanUp ( const std::vector< std::string > &  keep)

remove temporary files except to the ones in 'keep'

Definition at line 641 of file OpalSimulation.cpp.

References comm_, endl(), Expressions::find(), Hypervolume::fs, simulationDirName_, and Util::toUpper().

Here is the call graph for this function:

◆ collectResults()

void OpalSimulation::collectResults ( )
virtual

Parse SDDS stat file and build up requested variable dictionary.

Implements Simulation.

Definition at line 467 of file OpalSimulation.cpp.

References cleanUp(), constraints_, Physics::e, endl(), Expression::evaluate(), EVALUATE, Expression::getRegFuncs(), getVariableDictionary(), invalidBunch(), objectives_, pwd_, requestedVars_, simulationDirName_, simulationName_, and Expression::toString().

Here is the call graph for this function:

◆ copyH5_m()

void OpalSimulation::copyH5_m ( )
private

copy H5 file

Definition at line 175 of file OpalSimulation.cpp.

References endl(), Hypervolume::fs, Simulation::getArgs(), simulationDirName_, and simulationName_.

Referenced by setupFSStructure().

Here is the call graph for this function:

◆ createSymlink_m()

void OpalSimulation::createSymlink_m ( const std::string &  path)
private

create symbolic links

Definition at line 157 of file OpalSimulation.cpp.

References Physics::e, endl(), Hypervolume::fs, and simulationDirName_.

Referenced by setupFSStructure().

Here is the call graph for this function:

◆ getData()

std::map< std::string, std::vector< double > > OpalSimulation::getData ( const std::vector< std::string > &  statVariables)

◆ getResults()

reqVarContainer_t OpalSimulation::getResults ( )
inlinevirtual

returns container containing all requested variables with results

Implements Simulation.

Definition at line 70 of file OpalSimulation.h.

References requestedVars_.

◆ getVariableDictionary()

void OpalSimulation::getVariableDictionary ( variableDictionary_t dictionary,
const std::string &  filename,
const Expressions::Expr_t *const  expression 
)
private

get variables for expression evaluation from SDDS file. Can throw SDDSParserException

Definition at line 581 of file OpalSimulation.cpp.

References Expression::getReqVars(), and userVariables_.

Referenced by collectResults().

Here is the call graph for this function:

◆ hasResultsAvailable()

bool OpalSimulation::hasResultsAvailable ( )
private

check if we already have simulated the current set of design vars

Definition at line 142 of file OpalSimulation.cpp.

References endl(), simulationDirName_, and simulationName_.

Referenced by run().

Here is the call graph for this function:

◆ invalidBunch()

void OpalSimulation::invalidBunch ( )
private

mark a solution as invalid

Definition at line 614 of file OpalSimulation.cpp.

References EVALUATE, objectives_, and requestedVars_.

Referenced by collectResults().

◆ redirectOutToFile()

void OpalSimulation::redirectOutToFile ( )
private

redirect stdout and stderr to file

Definition at line 301 of file OpalSimulation.cpp.

References strm_buffer_, and strm_err_.

◆ restoreOut()

void OpalSimulation::restoreOut ( )
private

restore stdout and stderr to default

Definition at line 322 of file OpalSimulation.cpp.

References strm_buffer_, and strm_err_.

◆ run()

void OpalSimulation::run ( )
virtual

Calls Opal through Opal-lib wrapper and returns when simulation has either failed or finished.

Implements Simulation.

Definition at line 328 of file OpalSimulation.cpp.

References arg(), comm_, endl(), Hypervolume::fs, Simulation::getArgs(), hasResultsAvailable(), Options::info, Options::infoLevel, min(), pwd_, run_opal(), Options::seed, setupSimulation(), simulationDirName_, simulationName_, Options::warn, Options::warnLevel, OpalException::what(), and OpalException::where().

Here is the call graph for this function:

◆ setFilename()

void OpalSimulation::setFilename ( int  id)
inline

set job id (SAMPLE command)

Definition at line 73 of file OpalSimulation.h.

References id_m.

◆ setupFSStructure()

void OpalSimulation::setupFSStructure ( )
private

create directories, input files, symlinks...

Definition at line 243 of file OpalSimulation.cpp.

References comm_, copyH5_m(), createSymlink_m(), Physics::e, endl(), Hypervolume::fs, gs_, simulationDirName_, and simulationName_.

Referenced by setupSimulation().

Here is the call graph for this function:

◆ setupSimulation()

void OpalSimulation::setupSimulation ( )
private

create directories, input files, fieldmaps...

Definition at line 200 of file OpalSimulation.cpp.

References comm_, Hypervolume::fs, Simulation::getArgs(), OpalData::getInstance(), id_m, OpalData::setOptimizerFlag(), setupFSStructure(), simTmpDir_, simulationDirName_, and simulationName_.

Referenced by run().

Here is the call graph for this function:

Member Data Documentation

◆ comm_

MPI_Comm OpalSimulation::comm_
private

Definition at line 102 of file OpalSimulation.h.

Referenced by cleanUp(), run(), setupFSStructure(), and setupSimulation().

◆ constraints_

Expressions::Named_t OpalSimulation::constraints_
private

Definition at line 99 of file OpalSimulation.h.

Referenced by collectResults().

◆ dvarNames_

std::set<std::string> OpalSimulation::dvarNames_
private

Definition at line 100 of file OpalSimulation.h.

Referenced by OpalSimulation().

◆ gs_

boost::scoped_ptr<GenerateOpalSimulation> OpalSimulation::gs_
private

object to generate simulation input files

Definition at line 105 of file OpalSimulation.h.

Referenced by OpalSimulation(), and setupFSStructure().

◆ id_m

int OpalSimulation::id_m
private

job id (SAMPLE command)

Definition at line 108 of file OpalSimulation.h.

Referenced by setFilename(), and setupSimulation().

◆ objectives_

Expressions::Named_t OpalSimulation::objectives_
private

Definition at line 98 of file OpalSimulation.h.

Referenced by collectResults(), and invalidBunch().

◆ pwd_

std::string OpalSimulation::pwd_
private

holds current directory (for restoring)

Definition at line 85 of file OpalSimulation.h.

Referenced by collectResults(), and run().

◆ requestedVars_

reqVarContainer_t OpalSimulation::requestedVars_
private

holds solutions returned to the optimizer

Definition at line 96 of file OpalSimulation.h.

Referenced by collectResults(), getResults(), invalidBunch(), and ~OpalSimulation().

◆ simTmpDir_

std::string OpalSimulation::simTmpDir_
private

temporary directory for simulation data (environment var SIMTMPDIR)

Definition at line 82 of file OpalSimulation.h.

Referenced by OpalSimulation(), and setupSimulation().

◆ simulationDirName_

std::string OpalSimulation::simulationDirName_
private

full path of simulation directory (where simulation will be run)

Definition at line 80 of file OpalSimulation.h.

Referenced by cleanUp(), collectResults(), copyH5_m(), createSymlink_m(), getData(), hasResultsAvailable(), OpalSimulation(), run(), setupFSStructure(), and setupSimulation().

◆ simulationName_

std::string OpalSimulation::simulationName_
private

identification of the simulation (corresponding to output filename)

Definition at line 78 of file OpalSimulation.h.

Referenced by collectResults(), copyH5_m(), getData(), hasResultsAvailable(), OpalSimulation(), run(), setupFSStructure(), and setupSimulation().

◆ strm_buffer_

std::streambuf* OpalSimulation::strm_buffer_
private

stream buffer to redirect output

Definition at line 88 of file OpalSimulation.h.

Referenced by redirectOutToFile(), and restoreOut().

◆ strm_err_

std::streambuf* OpalSimulation::strm_err_
private

stream buffer to redirect stderr

Definition at line 90 of file OpalSimulation.h.

Referenced by redirectOutToFile(), and restoreOut().

◆ userVariables_

std::map<std::string, std::string> OpalSimulation::userVariables_
private

variable dictionary holding requested optimizer values

Definition at line 93 of file OpalSimulation.h.

Referenced by getVariableDictionary(), OpalSimulation(), and ~OpalSimulation().


The documentation for this class was generated from the following files: