18#include "cbm_object.h"
19#include "time/cbm_time.h"
21#include "kernel/kspatial.h"
22#include "kernel/ktemporal.h"
23#include "kernel/kfactorystore.h"
24#include "kernel/kstats.h"
29class work_dispatcher_t;
32class CBM_API domain_t :
public cbm::object_t
34 LDNDC_OBJECT(domain_t)
40 const_iterator( cbm::knodes_t
const & _knodes)
41 : m_ki( _knodes.cbegin()) { }
43 cbm::kernel_t
const * operator *()
44 {
return (*this->m_ki)->kernel; }
45 const_iterator operator++()
46 { ++this->m_ki;
return *
this; }
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; }
53 cbm::knodes_t::const_iterator m_ki;
55 const_iterator cbegin()
const
56 {
return const_iterator( this->m_kspatial->get_knodes()); }
57 const_iterator cend()
const
58 {
return const_iterator(); }
63 iterator( cbm::knodes_t & _knodes)
64 : m_ki( _knodes.begin()) { }
66 cbm::kernel_t * operator *()
67 {
return (*this->m_ki)->kernel; }
69 { ++this->m_ki;
return *
this; }
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; }
76 cbm::knodes_t::iterator m_ki;
79 {
return iterator( this->m_kspatial->get_knodes()); }
81 {
return iterator(); }
86 void select_systemcomponent(
char const * ,
87 char const * , cbm::kernel_t * = NULL );
95 virtual lerr_t initialize( cbm::io_dcomm_t *,
96 cbm::work_dispatcher_t * = NULL);
105 virtual lerr_t launch( cbm::td_scalar_t = 0 );
110 virtual lerr_t read( cbm::td_scalar_t ) {
return LDNDC_ERR_OK; }
111 virtual lerr_t solve( cbm::td_scalar_t ) {
return LDNDC_ERR_OK; }
112 virtual lerr_t integrate( cbm::td_scalar_t ) {
return LDNDC_ERR_OK; }
113 virtual lerr_t write( cbm::td_scalar_t ) {
return LDNDC_ERR_OK; }
127 virtual lerr_t finalize();
134 size_t number_of_kernels()
const;
141 size_t number_of_valid_kernels()
const;
152 size_t number_of_alive_kernels()
const;
154 bool is_complete_simulation()
const
155 {
return this->m_kspatial && this->m_kspatial->is_complete_simulation(); }
157#ifdef CRABMEAT_OUTPUTS_SERIALIZE
158 int create_checkpoint();
159 int restore_checkpoint( ldate_t);
162#ifdef CRABMEAT_ONLINECONTROL
164 lreply_t *, lrequest_t
const *);
166 int send_request_to_kernel(
167 lreply_t *, lrequest_t
const *);
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;
177 int kernel_resource_stats( kernels_stats_t &)
const;
181 cbm::kspatial_t * m_kspatial;
182 cbm::io_kcomm_t * m_kspatial_iokcomm;
184 cbm::ktemporal_t * m_ktemporal;
185 cbm::io_kcomm_t * m_ktemporal_iokcomm;
188 cbm::io_dcomm_t * m_iodcomm;
191 struct _SystemComponent
194 : kernel( NULL), iokcomm( NULL) { }
196 cbm::kernel_t * kernel;
197 cbm::io_kcomm_t * iokcomm;
199 std::map< std::string, _SystemComponent > m_systemcomponents;
204 lerr_t initialize_domain( cbm::work_dispatcher_t *,
int * );
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);
209 int check_if_launching_makes_sense(
210 cbm::td_scalar_t , lerr_t * );
The "Service Registry" holds information about available services (e.g., models, readers,...
Definition Lresources.h:51