crabmeat 1.0
Loading...
Searching...
No Matches
domain.h
1
14
15#ifndef CBM_DOMAIN_H_
16#define CBM_DOMAIN_H_
17
18#include "cbm_object.h"
19#include "time/cbm_time.h"
20
21#include "kernel/kspatial.h"
22#include "kernel/ktemporal.h"
23#include "kernel/kfactorystore.h"
24#include "kernel/kstats.h"
25
26namespace cbm {
27
28class io_dcomm_t;
29class work_dispatcher_t;
30
31
32class CBM_API domain_t : public cbm::object_t
33{
34 LDNDC_OBJECT(domain_t)
35 public:
36 class const_iterator
37 {
38 public:
39 const_iterator() { }
40 const_iterator( cbm::knodes_t const & _knodes)
41 : m_ki( _knodes.cbegin()) { }
42
43 cbm::kernel_t const * operator *()
44 { return (*this->m_ki)->kernel; }
45 const_iterator operator++()
46 { ++this->m_ki; return *this; }
47
48 bool operator==( const_iterator const & _rhs) const
49 { return this->m_ki == _rhs.m_ki; }
50 bool operator!=( const_iterator const & _rhs) const
51 { return this->m_ki != _rhs.m_ki; }
52 private:
53 cbm::knodes_t::const_iterator m_ki;
54 };
55 const_iterator cbegin() const
56 { return const_iterator( this->m_kspatial->get_knodes()); }
57 const_iterator cend() const
58 { return const_iterator(); }
59 class iterator
60 {
61 public:
62 iterator() { }
63 iterator( cbm::knodes_t & _knodes)
64 : m_ki( _knodes.begin()) { }
65
66 cbm::kernel_t * operator *()
67 { return (*this->m_ki)->kernel; }
68 iterator operator++()
69 { ++this->m_ki; return *this; }
70
71 bool operator==( iterator const & _rhs) const
72 { return this->m_ki == _rhs.m_ki; }
73 bool operator!=( iterator const & _rhs) const
74 { return this->m_ki != _rhs.m_ki; }
75 private:
76 cbm::knodes_t::iterator m_ki;
77 };
78 iterator begin()
79 { return iterator( this->m_kspatial->get_knodes()); }
80 iterator end()
81 { return iterator(); }
82 public:
83 domain_t();
84 virtual ~domain_t();
85
86 void select_systemcomponent( char const * /*component*/,
87 char const * /*name*/, cbm::kernel_t * = NULL /*object*/);
88
95 virtual lerr_t initialize( cbm::io_dcomm_t *,
96 cbm::work_dispatcher_t * = NULL);
97
105 virtual lerr_t launch( cbm::td_scalar_t = 0 /*stop time*/);
110 virtual lerr_t read( cbm::td_scalar_t /*stop time*/) { return LDNDC_ERR_OK; }
111 virtual lerr_t solve( cbm::td_scalar_t /*stop time*/) { return LDNDC_ERR_OK; }
112 virtual lerr_t integrate( cbm::td_scalar_t /*stop time*/) { return LDNDC_ERR_OK; }
113 virtual lerr_t write( cbm::td_scalar_t /*stop time*/) { return LDNDC_ERR_OK; }
114
127 virtual lerr_t finalize();
128
129
134 size_t number_of_kernels() const;
135
141 size_t number_of_valid_kernels() const;
142
152 size_t number_of_alive_kernels() const;
153
154 bool is_complete_simulation() const
155 { return this->m_kspatial && this->m_kspatial->is_complete_simulation(); }
156
157#ifdef CRABMEAT_OUTPUTS_SERIALIZE
158 int create_checkpoint();
159 int restore_checkpoint( ldate_t);
160#endif
161
162#ifdef CRABMEAT_ONLINECONTROL
163 int process_request(
164 lreply_t *, lrequest_t const *);
165 private:
166 int send_request_to_kernel(
167 lreply_t *, lrequest_t const *);
168#endif
169
170 public:
171 /* test if resource monitoring is available */
172 int have_kernel_resource_statistics() const;
173 int cputime_summary( cputime_summary_t *) const;
174 int walltime_summary( walltime_summary_t *) const;
175 void memory_summary( memory_summary_t *) const;
176
177 int kernel_resource_stats( kernels_stats_t &) const;
178
179 protected:
180 /* spatial domain handler (domainroot) */
181 cbm::kspatial_t * m_kspatial;
182 cbm::io_kcomm_t * m_kspatial_iokcomm;
183 /* temporal domain handler (scheduler) */
184 cbm::ktemporal_t * m_ktemporal;
185 cbm::io_kcomm_t * m_ktemporal_iokcomm;
186
187 /* domain communicator (takes ownership) */
188 cbm::io_dcomm_t * m_iodcomm;
189
190 /* */
191 struct _SystemComponent
192 {
193 _SystemComponent()
194 : kernel( NULL), iokcomm( NULL) { }
195 std::string name;
196 cbm::kernel_t * kernel;
197 cbm::io_kcomm_t * iokcomm;
198 };
199 std::map< std::string, _SystemComponent > m_systemcomponents;
200
201 int m_isfinalized;
202 double m_runtime;
203
204 lerr_t initialize_domain( cbm::work_dispatcher_t *, int * /*return domain size*/);
205 lerr_t m_initialize_temporal_controller();
206 lerr_t m_initialize_spatial_controller();
207 lerr_t m_domain_from_input( cbm::source_descriptor_t const *, size_t);
208
209 int check_if_launching_makes_sense(
210 cbm::td_scalar_t /*requested stop time*/, lerr_t * /*return code*/);
211};
212
213} /* namespace cbm */
214
215#endif /* !CBM_DOMAIN_H_ */
216
The "Service Registry" holds information about available services (e.g., models, readers,...
Definition Lresources.h:51