escript  Revision_
SplitWorld.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2014-2016 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 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 #ifndef escript_SplitWorld_H
18 #define escript_SplitWorld_H
19 
20 #include "AbstractReducer.h"
21 #include "SubWorld.h"
22 
23 #include <boost/python.hpp>
24 #include <boost/smart_ptr.hpp>
25 
26 namespace escript
27 {
28 
39 {
40 public:
41  SplitWorld(unsigned int numgroups, MPI_Comm global=MPI_COMM_WORLD);
42  ~SplitWorld();
43  boost::python::object buildDomains(boost::python::tuple t, boost::python::dict kwargs);
44 
45  void runJobs();
46 
47  void addJob(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw);
48  void addJobPerWorld(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw);
49 
50  void addVariable(std::string name, boost::python::object creator, boost::python::tuple ntup, boost::python::dict kwargs);
51  void removeVariable(std::string name);
52  void clearVariable(std::string name);
53  std::list<std::pair<std::string, bool> > getVarList();
54  boost::python::object getVarPyList();
55  boost::python::object getVarPyInfo();
56 
57  void clearAllJobs();
58 
59  DataTypes::real_t getScalarVariable(const std::string& name);
60  boost::python::object getLocalObjectVariable(const std::string& name);
61 
62  int getSubWorldCount();
63  int getSubWorldID();
64 
65  void copyVariable(const std::string& src, const std::string& dest);
66 
67 
68 private:
69  JMPI globalcom; // communicator linking all procs used in this splitworld
70  JMPI leadercom; // communicator linking the first proc in each subworld
71  escript::SubWorld_ptr localworld; // subworld which this process belongs to
72  unsigned int swcount; // number of subwords
73  unsigned int localid; // position of localworld in overall world sequence
74 
75  // details of jobs to be created
76  std::vector<boost::python::object> create;
77  std::vector<boost::python::tuple> tupargs;
78  std::vector<boost::python::dict> kwargs;
79 
80  unsigned int jobcounter; // note that the id of the first job is 1 not 0.
81  bool manualimport; // if false, all reduced vars will be shipped to all subworlds
82  void clearPendingJobs();
83  void distributeJobs();
84 
85 };
86 
87 
91 boost::python::object raw_buildDomains(boost::python::tuple t, boost::python::dict kwargs);
92 
96 boost::python::object raw_addJob(boost::python::tuple t, boost::python::dict kwargs);
97 
101 boost::python::object raw_addJobPerWorld(boost::python::tuple t, boost::python::dict kwargs);
102 
106 boost::python::object raw_addVariable(boost::python::tuple t, boost::python::dict kwargs);
107 }
108 #endif
109 
boost::python::object raw_addVariable(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:512
void addJobPerWorld(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw)
Definition: SplitWorld.cpp:234
boost::python::object raw_addJob(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:472
boost::python::object raw_buildDomains(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:455
boost::python::object buildDomains(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:97
void runJobs()
Definition: SplitWorld.cpp:123
Definition: AbstractContinuousDomain.cpp:22
std::vector< boost::python::object > create
Definition: SplitWorld.h:76
boost::python::object getVarPyInfo()
Definition: SplitWorld.cpp:331
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
std::vector< boost::python::dict > kwargs
Definition: SplitWorld.h:78
std::list< std::pair< std::string, bool > > getVarList()
Definition: SplitWorld.cpp:310
#define MPI_COMM_WORLD
Definition: EsysMPI.h:47
bool manualimport
Definition: SplitWorld.h:81
void clearPendingJobs()
Definition: SplitWorld.cpp:353
boost::shared_ptr< SubWorld > SubWorld_ptr
Definition: SubWorld.h:146
void addJob(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw)
Definition: SplitWorld.cpp:223
boost::python::object getVarPyList()
Definition: SplitWorld.cpp:316
Definition: SplitWorld.h:38
int getSubWorldID()
Definition: SplitWorld.cpp:432
void clearVariable(std::string name)
Definition: SplitWorld.cpp:305
void clearAllJobs()
Definition: SplitWorld.cpp:347
~SplitWorld()
Definition: SplitWorld.cpp:90
int MPI_Comm
Definition: EsysMPI.h:41
boost::python::object raw_addJobPerWorld(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:491
void removeVariable(std::string name)
Definition: SplitWorld.cpp:299
void addVariable(std::string name, boost::python::object creator, boost::python::tuple ntup, boost::python::dict kwargs)
Definition: SplitWorld.cpp:286
JMPI globalcom
Definition: SplitWorld.h:69
unsigned int localid
Definition: SplitWorld.h:73
DataTypes::real_t getScalarVariable(const std::string &name)
Definition: SplitWorld.cpp:29
unsigned int swcount
Definition: SplitWorld.h:72
void distributeJobs()
Definition: SplitWorld.cpp:362
JMPI leadercom
Definition: SplitWorld.h:70
unsigned int jobcounter
Definition: SplitWorld.h:80
int getSubWorldCount()
Definition: SplitWorld.cpp:427
std::vector< boost::python::tuple > tupargs
Definition: SplitWorld.h:77
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:50
void copyVariable(const std::string &src, const std::string &dest)
Definition: SplitWorld.cpp:437
escript::SubWorld_ptr localworld
Definition: SplitWorld.h:71
SplitWorld(unsigned int numgroups, MPI_Comm global=91)
Definition: SplitWorld.cpp:42
boost::python::object getLocalObjectVariable(const std::string &name)
Definition: SplitWorld.cpp:35