@@ -241,7 +241,8 @@ void register_soma_report(NrnThread& nt,
241241 config.report_dt , sizemapping, (char *)config.type_str , extramapping,
242242 (char *)config.unit );
243243
244- /* * add extra mapping */
244+ records_set_report_max_buffer_size_hint ((char *)config.output_path , config.buffer_size );
245+ /* * add extra mapping */
245246 records_extra_mapping (config.output_path , gid, 5 , extra);
246247 for (int var_idx = 0 ; var_idx < vars.size (); ++var_idx) {
247248 /* * 1st key is section-id and 1st value is segment of soma */
@@ -276,7 +277,9 @@ void register_compartment_report(NrnThread& nt,
276277 records_add_report ((char *)config.output_path , gid, gid, gid, config.start , config.stop ,
277278 config.report_dt , sizemapping, (char *)config.type_str , extramapping,
278279 (char *)config.unit );
279- /* * add extra mapping */
280+
281+ records_set_report_max_buffer_size_hint ((char *)config.output_path , config.buffer_size );
282+ /* * add extra mapping */
280283 records_extra_mapping (config.output_path , gid, 5 , extra);
281284 for (int var_idx = 0 ; var_idx < vars.size (); ++var_idx) {
282285 mapping[0 ] = vars[var_idx].id ;
@@ -312,7 +315,9 @@ void register_custom_report(NrnThread& nt,
312315 records_add_report ((char *)config.output_path , gid, gid, gid, config.start , config.stop ,
313316 config.report_dt , sizemapping, (char *)config.type_str , extramapping,
314317 (char *)config.unit );
315- /* * add extra mapping : @todo api changes in reportinglib*/
318+
319+ records_set_report_max_buffer_size_hint ((char *)config.output_path , config.buffer_size );
320+ /* * add extra mapping : @todo api changes in reportinglib*/
316321 records_extra_mapping ((char *)config.output_path , gid, 5 , extra);
317322 for (int var_idx = 0 ; var_idx < vars.size (); ++var_idx) {
318323 mapping[0 ] = vars[var_idx].id ;
@@ -350,20 +355,13 @@ std::vector<int> map_gids(NrnThread& nt) {
350355}
351356#endif // ENABLE_REPORTING
352357
353- // number of min-delay intervals to buffer
354- static int num_min_delay_to_buffer = 100 ;
355-
356- // / number of min-delays completed since last flush
357- static int num_min_delays_completed = 0 ;
358+ // Size in MB of the report buffer
359+ static int size_report_buffer = 4 ;
358360
359361void nrn_flush_reports (double t) {
360362#ifdef ENABLE_REPORTING
361363 // flush before buffer is full
362- if (num_min_delays_completed >= (num_min_delay_to_buffer - 2 )) {
363- records_flush (t);
364- num_min_delays_completed = 0 ;
365- }
366- num_min_delays_completed++;
364+ records_end_iteration (t);
367365#endif
368366}
369367
@@ -376,20 +374,18 @@ void nrn_flush_reports(double t) {
376374 */
377375void setup_report_engine (double dt_report, double mindelay) {
378376#ifdef ENABLE_REPORTING
379- int timesteps_to_buffer = mindelay / dt_report + 2 ;
380- timesteps_to_buffer *= num_min_delay_to_buffer;
381-
382- records_set_steps_to_buffer (timesteps_to_buffer);
383377 /* * reportinglib setup */
384378 records_setup_communicator ();
385379 records_finish_and_share ();
386380#endif // ENABLE_REPORTING
387381}
388382
389- // number of min delay intervals that will be buffered with reports
390- // @todo : this will be replaced by buffer size in MB
391- void set_num_mindelay_to_buffer (int n) {
392- num_min_delay_to_buffer = n;
383+ // Size in MB of the report buffers
384+ void set_report_buffer_size (int n) {
385+ size_report_buffer = n;
386+ #ifdef ENABLE_REPORTING
387+ records_set_max_buffer_size_hint (size_report_buffer);
388+ #endif
393389}
394390
395391// TODO: we can have one ReportEvent per register_report_call generated by MPI rank
0 commit comments