escript  Revision_
SplitWorld.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2014-2018 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 #ifndef escript_SplitWorld_H
19 #define escript_SplitWorld_H
20 
21 #include "AbstractReducer.h"
22 #include "SubWorld.h"
23 
24 #include <boost/python.hpp>
25 #include <boost/smart_ptr.hpp>
26 
27 namespace escript
28 {
29 
40 {
41 public:
42  SplitWorld(unsigned int numgroups, MPI_Comm global=MPI_COMM_WORLD);
43  ~SplitWorld();
44  boost::python::object buildDomains(boost::python::tuple t, boost::python::dict kwargs);
45 
46  void runJobs();
47 
48  void addJob(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw);
49  void addJobPerWorld(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw);
50 
51  void addVariable(std::string name, boost::python::object creator, boost::python::tuple ntup, boost::python::dict kwargs);
52  void removeVariable(std::string name);
53  void clearVariable(std::string name);
54  std::list<std::pair<std::string, bool> > getVarList();
55  boost::python::object getVarPyList();
56  boost::python::object getVarPyInfo();
57 
58  void clearAllJobs();
59 
60  DataTypes::real_t getScalarVariable(const std::string& name);
61  boost::python::object getLocalObjectVariable(const std::string& name);
62 
63  int getSubWorldCount();
64  int getSubWorldID();
65 
66  void copyVariable(const std::string& src, const std::string& dest);
67 
68 
69 private:
70  JMPI globalcom; // communicator linking all procs used in this splitworld
71  JMPI leadercom; // communicator linking the first proc in each subworld
72  escript::SubWorld_ptr localworld; // subworld which this process belongs to
73  unsigned int swcount; // number of subwords
74  unsigned int localid; // position of localworld in overall world sequence
75 
76  // details of jobs to be created
77  std::vector<boost::python::object> create;
78  std::vector<boost::python::tuple> tupargs;
79  std::vector<boost::python::dict> kwargs;
80 
81  unsigned int jobcounter; // note that the id of the first job is 1 not 0.
82  bool manualimport; // if false, all reduced vars will be shipped to all subworlds
83  void clearPendingJobs();
84  void distributeJobs();
85 
86 };
87 
88 
92 boost::python::object raw_buildDomains(boost::python::tuple t, boost::python::dict kwargs);
93 
97 boost::python::object raw_addJob(boost::python::tuple t, boost::python::dict kwargs);
98 
102 boost::python::object raw_addJobPerWorld(boost::python::tuple t, boost::python::dict kwargs);
103 
107 boost::python::object raw_addVariable(boost::python::tuple t, boost::python::dict kwargs);
108 }
109 #endif
110 
escript::SplitWorld::kwargs
std::vector< boost::python::dict > kwargs
Definition: SplitWorld.h:79
escript::SplitWorld::jobcounter
unsigned int jobcounter
Definition: SplitWorld.h:81
escript::SplitWorld::tupargs
std::vector< boost::python::tuple > tupargs
Definition: SplitWorld.h:78
escript::DataTypes::real_t
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:51
escript::SplitWorld::getScalarVariable
DataTypes::real_t getScalarVariable(const std::string &name)
Definition: SplitWorld.cpp:30
AbstractReducer.h
escript::SplitWorld::swcount
unsigned int swcount
Definition: SplitWorld.h:73
escript::SplitWorld::removeVariable
void removeVariable(std::string name)
Definition: SplitWorld.cpp:300
escript::reducerstatus
Definition: AbstractReducer.h:30
escript::SplitWorld::getVarPyInfo
boost::python::object getVarPyInfo()
Definition: SplitWorld.cpp:332
escript::SplitWorld::distributeJobs
void distributeJobs()
Definition: SplitWorld.cpp:363
escript::SplitWorld::getSubWorldCount
int getSubWorldCount()
Definition: SplitWorld.cpp:428
escript::raw_addJob
boost::python::object raw_addJob(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:473
escript::NoCOMM_WORLD
Definition: EsysMPI.h:171
escript::Domain_ptr
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition: AbstractDomain.h:41
SplitWorldException.h
escript::checkResult
bool checkResult(int res, int &mres, const JMPI &info)
Everyone puts in their error code and everyone gets the largest one.
Definition: EsysMPI.cpp:110
escript::SplitWorld::localworld
escript::SubWorld_ptr localworld
Definition: SplitWorld.h:72
escript::makeInfo
JMPI makeInfo(MPI_Comm comm, bool owncom)
Definition: EsysMPI.cpp:29
escript::SplitWorld::addVariable
void addVariable(std::string name, boost::python::object creator, boost::python::tuple ntup, boost::python::dict kwargs)
Definition: SplitWorld.cpp:287
escript::SplitWorld::clearAllJobs
void clearAllJobs()
Definition: SplitWorld.cpp:348
escript::SplitWorld::leadercom
JMPI leadercom
Definition: SplitWorld.h:71
escript::SplitWorld::copyVariable
void copyVariable(const std::string &src, const std::string &dest)
Definition: SplitWorld.cpp:438
escript::Reducer_ptr
boost::shared_ptr< AbstractReducer > Reducer_ptr
Definition: AbstractReducer.h:118
escript::SplitWorld::globalcom
JMPI globalcom
Definition: SplitWorld.h:70
SplitWorld.h
MPI_COMM_WORLD
#define MPI_COMM_WORLD
Definition: EsysMPI.h:48
escript::JMPI
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:72
escript::SplitWorld::localid
unsigned int localid
Definition: SplitWorld.h:74
escript::SplitWorldException
Definition: SplitWorldException.h:29
AbstractDomain.h
escript::SubWorld
Definition: SubWorld.h:49
escript::SplitWorld::SplitWorld
SplitWorld(unsigned int numgroups, MPI_Comm global=91)
Definition: SplitWorld.cpp:43
escript::SplitWorld::runJobs
void runJobs()
Definition: SplitWorld.cpp:124
SubWorld.h
escript::SplitWorld::addJobPerWorld
void addJobPerWorld(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw)
Definition: SplitWorld.cpp:235
escript::SplitWorld::getVarList
std::list< std::pair< std::string, bool > > getVarList()
Definition: SplitWorld.cpp:311
escript::SubWorld_ptr
boost::shared_ptr< SubWorld > SubWorld_ptr
Definition: SubWorld.h:147
escript::SplitWorld::getSubWorldID
int getSubWorldID()
Definition: SplitWorld.cpp:433
escript::SplitWorld
Definition: SplitWorld.h:40
escript
Definition: AbstractContinuousDomain.cpp:23
escript::SplitWorld::clearPendingJobs
void clearPendingJobs()
Definition: SplitWorld.cpp:354
escript::SplitWorld::create
std::vector< boost::python::object > create
Definition: SplitWorld.h:77
escript::SplitWorld::getVarPyList
boost::python::object getVarPyList()
Definition: SplitWorld.cpp:317
escript::SplitWorld::addJob
void addJob(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw)
Definition: SplitWorld.cpp:224
MPI_Comm
int MPI_Comm
Definition: EsysMPI.h:42
escript::SplitWorld::buildDomains
boost::python::object buildDomains(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:98
escript::raw_addJobPerWorld
boost::python::object raw_addJobPerWorld(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:492
escript::raw_addVariable
boost::python::object raw_addVariable(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:513
escript::SplitWorld::getLocalObjectVariable
boost::python::object getLocalObjectVariable(const std::string &name)
Definition: SplitWorld.cpp:36
escript::shipString
bool shipString(const char *src, char **dest, MPI_Comm &comm)
Definition: EsysMPI.cpp:164
escript::getStringFromPyException
void getStringFromPyException(boost::python::error_already_set e, std::string &errormsg)
Definition: pyerr.cpp:27
escript::SplitWorld::manualimport
bool manualimport
Definition: SplitWorld.h:82
pyerr.h
escript::SplitWorld::~SplitWorld
~SplitWorld()
Definition: SplitWorld.cpp:91
escript::raw_buildDomains
boost::python::object raw_buildDomains(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:456
escript::SplitWorld::clearVariable
void clearVariable(std::string name)
Definition: SplitWorld.cpp:306