escript  Revision_Unversioneddirectory
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 #include <boost/python.hpp>
20 #include <boost/smart_ptr.hpp>
21 #include "esysUtils/Esys_MPI.h"
22 #include "SubWorld.h"
23 #include "AbstractReducer.h"
24 namespace escript
25 {
26 
37 {
38 public:
39  SplitWorld(unsigned int numgroups, MPI_Comm global=MPI_COMM_WORLD);
40  ~SplitWorld();
41  boost::python::object buildDomains(boost::python::tuple t, boost::python::dict kwargs);
42 
43  void runJobs();
44 
45  void addJob(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw);
46  void addJobPerWorld(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw);
47 
48  void addVariable(std::string name, boost::python::object creator, boost::python::tuple ntup, boost::python::dict kwargs);
49  void removeVariable(std::string name);
50  void clearVariable(std::string name);
51  std::list<std::pair<std::string, bool> > getVarList();
52  boost::python::object getVarPyList();
53  boost::python::object getVarPyInfo();
54 
55  void clearAllJobs();
56 
57  double getScalarVariable(const std::string& name);
58  boost::python::object getLocalObjectVariable(const std::string& name);
59 
60  int getSubWorldCount();
61  int getSubWorldID();
62 
63  void copyVariable(const std::string& src, const std::string& dest);
64 
65 
66 private:
67  esysUtils::JMPI globalcom; // communicator linking all procs used in this splitworld
68  esysUtils::JMPI leadercom; // communicator linking the first proc in each subworld
69  escript::SubWorld_ptr localworld; // subworld which this process belongs to
70  unsigned int swcount; // number of subwords
71  unsigned int localid; // position of localworld in overall world sequence
72 
73  // details of jobs to be created
74  std::vector<boost::python::object> create;
75  std::vector<boost::python::tuple> tupargs;
76  std::vector<boost::python::dict> kwargs;
77 
78  unsigned int jobcounter; // note that the id of the first job is 1 not 0.
79  bool manualimport; // if false, all reduced vars will be shipped to all subworlds
80  void clearPendingJobs();
81  void distributeJobs();
82 
83 };
84 
85 
89 boost::python::object raw_buildDomains(boost::python::tuple t, boost::python::dict kwargs);
90 
94 boost::python::object raw_addJob(boost::python::tuple t, boost::python::dict kwargs);
95 
99 boost::python::object raw_addJobPerWorld(boost::python::tuple t, boost::python::dict kwargs);
100 
104 boost::python::object raw_addVariable(boost::python::tuple t, boost::python::dict kwargs);
105 }
106 #endif
boost::python::object raw_addVariable(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:518
void addJobPerWorld(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw)
Definition: SplitWorld.cpp:240
boost::python::object raw_addJob(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:478
boost::python::object raw_buildDomains(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:461
boost::python::object buildDomains(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:103
void runJobs()
Definition: SplitWorld.cpp:129
SplitWorld(unsigned int numgroups, MPI_Comm global=MPI_COMM_WORLD)
Definition: SplitWorld.cpp:49
Definition: AbstractContinuousDomain.cpp:24
std::vector< boost::python::object > create
Definition: SplitWorld.h:74
boost::python::object getVarPyInfo()
Definition: SplitWorld.cpp:337
std::vector< boost::python::dict > kwargs
Definition: SplitWorld.h:76
int MPI_Comm
Definition: Esys_MPI.h:38
std::list< std::pair< std::string, bool > > getVarList()
Definition: SplitWorld.cpp:316
#define MPI_COMM_WORLD
Definition: Esys_MPI.h:44
bool manualimport
Definition: SplitWorld.h:79
void clearPendingJobs()
Definition: SplitWorld.cpp:359
boost::shared_ptr< SubWorld > SubWorld_ptr
Definition: SubWorld.h:142
void addJob(boost::python::object creator, boost::python::tuple tup, boost::python::dict kw)
Definition: SplitWorld.cpp:229
boost::python::object getVarPyList()
Definition: SplitWorld.cpp:322
Definition: SplitWorld.h:36
int getSubWorldID()
Definition: SplitWorld.cpp:438
void clearVariable(std::string name)
Definition: SplitWorld.cpp:311
void clearAllJobs()
Definition: SplitWorld.cpp:353
~SplitWorld()
Definition: SplitWorld.cpp:96
boost::python::object raw_addJobPerWorld(boost::python::tuple t, boost::python::dict kwargs)
Definition: SplitWorld.cpp:497
void removeVariable(std::string name)
Definition: SplitWorld.cpp:305
void addVariable(std::string name, boost::python::object creator, boost::python::tuple ntup, boost::python::dict kwargs)
Definition: SplitWorld.cpp:292
unsigned int localid
Definition: SplitWorld.h:71
unsigned int swcount
Definition: SplitWorld.h:70
void distributeJobs()
Definition: SplitWorld.cpp:368
unsigned int jobcounter
Definition: SplitWorld.h:78
esysUtils::JMPI leadercom
Definition: SplitWorld.h:68
int getSubWorldCount()
Definition: SplitWorld.cpp:433
esysUtils::JMPI globalcom
Definition: SplitWorld.h:67
boost::shared_ptr< JMPI_ > JMPI
Definition: Esys_MPI.h:79
std::vector< boost::python::tuple > tupargs
Definition: SplitWorld.h:75
void copyVariable(const std::string &src, const std::string &dest)
Definition: SplitWorld.cpp:443
escript::SubWorld_ptr localworld
Definition: SplitWorld.h:69
boost::python::object getLocalObjectVariable(const std::string &name)
Definition: SplitWorld.cpp:41
double getScalarVariable(const std::string &name)
Definition: SplitWorld.cpp:35