    

 ## On this page

  

 

 # rocky\_scalars

 Last update: 17.07.2025 

<a id="l00001" name="l00001"></a> 1\#pragma once

<a id="l00002" name="l00002"></a> 2 

<a id="l00003" name="l00003"></a> 3// Includes ========================================================================================

<a id="l00004" name="l00004"></a> 4\#include &lt;rocky20/model/rocky\_model.h&gt;

<a id="l00005" name="l00005"></a> 5\#include &lt;rocky20/sph/sph\_data.h&gt;

<a id="l00006" name="l00006"></a> 6\#include &lt;rocky20/api/device/api\_backend.hpp&gt;

<a id="l00007" name="l00007"></a> 7\#include &lt;rocky20/api/rocky\_statistics\_data.hpp&gt;

<a id="l00008" name="l00008"></a> 8 

<a id="l00016" name="l00016"></a> 16template &lt;class _scalars&gt;

<a id="l00017" name="l00017"></a> 17struct ScalarsModel

<a id="l00018" name="l00018"></a> 18{

<a id="l00029" name="l00029"></a> 29 int find(const char* name);

<a id="l00030" name="l00030"></a> 30 

<a id="l00050" name="l00050"></a> 50 int add(const char* _name, const char* _unit, bool output = true);

<a id="l00051" name="l00051"></a> 51 

<a id="l00052" name="l00052"></a> 52 template&lt;class _data_type&gt;

<a id="l00053" name="l00053"></a> 53 int add(const char* _name, const char* _unit, bool output)

<a id="l00054" name="l00054"></a> 54 {

<a id="l00055" name="l00055"></a> 55 return this-&gt;_impl.template add_scalars&lt;_data_type&gt;(

<a id="l00056" name="l00056"></a> 56 _name, _unit, rocky20::ScalarsInfo::cotNone, output);

<a id="l00057" name="l00057"></a> 57 }

<a id="l00071" name="l00071"></a> 71 int add_statistics_adder(const char* _name, const char* _unit);

<a id="l00072" name="l00072"></a> 72 

<a id="l00083" name="l00083"></a> 83 [[deprecated("IRockyStatisticsCounter is no longer needed for statistics")]]

<a id="l00084" name="l00084"></a> 84 int add_statistics_counter(const char* _name);

<a id="l00085" name="l00085"></a> 85 

<a id="l00099" name="l00099"></a> 99 int add_statistics_accumulator(const char* _name, const char* _unit);

<a id="l00100" name="l00100"></a> 100 

<a id="l00107" name="l00107"></a> 107 void reset(int scalar_index);

<a id="l00108" name="l00108"></a> 108 

<a id="l00123" name="l00123"></a> 123 void set_dimension(int scalar_index, double dimension_factor);

<a id="l00124" name="l00124"></a> 124 

<a id="l00134" name="l00134"></a> 134 template&lt;class _data_type = double&gt;

<a id="l00135" name="l00135"></a> 135 _data_type* get_scalars_array(int scalar_index)

<a id="l00136" name="l00136"></a> 136 {

<a id="l00137" name="l00137"></a> 137 return this-&gt;_impl.template get_scalars&lt;_data_type&gt;(scalar_index);

<a id="l00138" name="l00138"></a> 138 }

<a id="l00139" name="l00139"></a> 139 

<a id="l00140" name="l00140"></a> 140 ScalarsModel(_scalars&amp; scalars, const std::vector&lt; int &gt;&amp; device_ids);

<a id="l00141" name="l00141"></a> 141 

<a id="l00142" name="l00142"></a> 142 _scalars&amp; _impl;

<a id="l00143" name="l00143"></a> 143 const std::vector&lt; int &gt;&amp; device_ids;

<a id="l00144" name="l00144"></a> 144 

<a id="l00145" name="l00145"></a> 145};

<a id="l00146" name="l00146"></a> 146 

<a id="l00157" name="l00157"></a> 157template &lt;class _scalars&gt;

<a id="l00158" name="l00158"></a> 158struct EntityScalars

<a id="l00159" name="l00159"></a> 159{

<a id="l00160" name="l00160"></a> 160 

<a id="l00161" name="l00161"></a> 161 typedef typename _scalars::KnownTypes KnownTypes;

<a id="l00162" name="l00162"></a> 162 

<a id="l00163" name="l00163"></a> 163 _scalars&amp; _impl;

<a id="l00164" name="l00164"></a> 164 int element_index;

<a id="l00165" name="l00165"></a> 165 

<a id="l00166" name="l00166"></a> 166 ROCKY_FUNCTIONS

<a id="l00167" name="l00167"></a> 167 EntityScalars(_scalars&amp; scalars, int _element_index) : _impl(scalars), element_index(_element_index)

<a id="l00168" name="l00168"></a> 168 {

<a id="l00169" name="l00169"></a> 169 }

<a id="l00170" name="l00170"></a> 170 

<a id="l00171" name="l00171"></a> 171 template &lt;class _data_type = double&gt;

<a id="l00172" name="l00172"></a> 172 ROCKY_FUNCTIONS

<a id="l00173" name="l00173"></a> 173 _data_type&amp; get_known_scalar(KnownTypes scalars_type)

<a id="l00174" name="l00174"></a> 174 {

<a id="l00175" name="l00175"></a> 175 return this-&gt;_impl._scalars::template get_known_scalar&lt;_data_type&gt;(

<a id="l00176" name="l00176"></a> 176 scalars_type, this-&gt;element_index);

<a id="l00177" name="l00177"></a> 177 }

<a id="l00178" name="l00178"></a> 178 

<a id="l00179" name="l00179"></a> 179 template &lt;class _data_type = double&gt;

<a id="l00180" name="l00180"></a> 180 ROCKY_FUNCTIONS

<a id="l00181" name="l00181"></a> 181 _data_type get_known_scalar(KnownTypes scalars_type) const

<a id="l00182" name="l00182"></a> 182 {

<a id="l00183" name="l00183"></a> 183 return this-&gt;_impl._scalars::template get_known_scalar&lt;_data_type&gt;(

<a id="l00184" name="l00184"></a> 184 scalars_type, this-&gt;element_index);

<a id="l00185" name="l00185"></a> 185 }

<a id="l00186" name="l00186"></a> 186 

<a id="l00187" name="l00187"></a> 187 template &lt;class _data_type = double&gt;

<a id="l00188" name="l00188"></a> 188 ROCKY_FUNCTIONS

<a id="l00189" name="l00189"></a> 189 void add_known_scalar(KnownTypes scalars_type, _data_type value)

<a id="l00190" name="l00190"></a> 190 {

<a id="l00191" name="l00191"></a> 191 backend::atomic_add(

<a id="l00192" name="l00192"></a> 192 &amp;this-&gt;_impl._scalars::template get_known_scalar&lt;_data_type&gt;(

<a id="l00193" name="l00193"></a> 193 scalars_type, this-&gt;element_index),

<a id="l00194" name="l00194"></a> 194 value);

<a id="l00195" name="l00195"></a> 195 }

<a id="l00196" name="l00196"></a> 196 

<a id="l00206" name="l00206"></a> 206 template &lt;class _data_type = double&gt;

<a id="l00207" name="l00207"></a> 207 ROCKY_FUNCTIONS

<a id="l00208" name="l00208"></a> 208 _data_type get_scalar(int scalar_index) const

<a id="l00209" name="l00209"></a> 209 {

<a id="l00210" name="l00210"></a> 210 return this-&gt;_impl._scalars::template get_scalar&lt;_data_type&gt;(scalar_index, this-&gt;element_index);

<a id="l00211" name="l00211"></a> 211 }

<a id="l00212" name="l00212"></a> 212 

<a id="l00213" name="l00213"></a> 213 ROCKY_FUNCTIONS

<a id="l00214" name="l00214"></a> 214 [IRockyStatisticsAdder](structIRockyStatisticsAdder.xhtml) get_statistics_adder(int scalar_index) const

<a id="l00215" name="l00215"></a> 215 {

<a id="l00216" name="l00216"></a> 216 return this-&gt;_impl._scalars::template get_scalar&lt;IRockyStatisticsAdder&gt;(scalar_index, this-&gt;element_index);

<a id="l00217" name="l00217"></a> 217 }

<a id="l00218" name="l00218"></a> 218 

<a id="l00219" name="l00219"></a> 219 ROCKY_FUNCTIONS

<a id="l00220" name="l00220"></a> 220 [IRockyStatisticsAccumulator](structIRockyStatisticsAccumulator.xhtml) get_statistics_accumulator(int scalar_index) const

<a id="l00221" name="l00221"></a> 221 {

<a id="l00222" name="l00222"></a> 222 return this-&gt;_impl._scalars::template get_scalar&lt;IRockyStatisticsAccumulator&gt;(scalar_index, this-&gt;element_index);

<a id="l00223" name="l00223"></a> 223 }

<a id="l00224" name="l00224"></a> 224 

<a id="l00225" name="l00225"></a> 225 [[deprecated("IRockyStatisticsCounter is no longer needed for statistics")]]

<a id="l00226" name="l00226"></a> 226 ROCKY_FUNCTIONS

<a id="l00227" name="l00227"></a> 227 IRockyStatisticsCounter get_statistics_counter(int scalar_index) const

<a id="l00228" name="l00228"></a> 228 {

<a id="l00229" name="l00229"></a> 229 return this-&gt;_impl._scalars::template get_scalar&lt;IRockyStatisticsCounter&gt;(scalar_index, this-&gt;element_index);

<a id="l00230" name="l00230"></a> 230 }

<a id="l00231" name="l00231"></a> 231 

<a id="l00241" name="l00241"></a> 241 template &lt;class _data_type = double&gt;

<a id="l00242" name="l00242"></a> 242 ROCKY_FUNCTIONS

<a id="l00243" name="l00243"></a> 243 void set_scalar(int scalars_index, _data_type value) const

<a id="l00244" name="l00244"></a> 244 {

<a id="l00245" name="l00245"></a> 245 this-&gt;_impl._scalars::template get_scalar&lt;_data_type&gt;(

<a id="l00246" name="l00246"></a> 246 scalars_index, this-&gt;element_index) = value;

<a id="l00247" name="l00247"></a> 247 }

<a id="l00248" name="l00248"></a> 248 

<a id="l00258" name="l00258"></a> 258 template &lt;class _data_type = double&gt;

<a id="l00259" name="l00259"></a> 259 ROCKY_FUNCTIONS

<a id="l00260" name="l00260"></a> 260 void add_scalar(int scalar_index, _data_type value) const

<a id="l00261" name="l00261"></a> 261 {

<a id="l00262" name="l00262"></a> 262 backend::atomic_add(

<a id="l00263" name="l00263"></a> 263 &amp;this-&gt;_impl._scalars::template get_scalar&lt;_data_type&gt;(scalar_index, this-&gt;element_index),

<a id="l00264" name="l00264"></a> 264 value

<a id="l00265" name="l00265"></a> 265 );

<a id="l00266" name="l00266"></a> 266 }

<a id="l00267" name="l00267"></a> 267 

<a id="l00279" name="l00279"></a> 279 template &lt;class _data_type = double&gt;

<a id="l00280" name="l00280"></a> 280 ROCKY_FUNCTIONS

<a id="l00281" name="l00281"></a> 281 void max_scalar(int scalar_index, _data_type value) const

<a id="l00282" name="l00282"></a> 282 {

<a id="l00283" name="l00283"></a> 283 backend::atomic_max(

<a id="l00284" name="l00284"></a> 284 &amp;this-&gt;_impl._scalars::template get_scalar&lt;_data_type&gt;(scalar_index, this-&gt;element_index),

<a id="l00285" name="l00285"></a> 285 value

<a id="l00286" name="l00286"></a> 286 );

<a id="l00287" name="l00287"></a> 287 }

<a id="l00288" name="l00288"></a> 288 

<a id="l00289" name="l00289"></a> 289 [[deprecated("IRockyStatisticsCounter is no longer needed for statistics")]]

<a id="l00290" name="l00290"></a> 290 ROCKY_FUNCTIONS

<a id="l00291" name="l00291"></a> 291 void add_value_to_statistics_adder(int scalar_index, double value, double count)

<a id="l00292" name="l00292"></a> 292 {

<a id="l00293" name="l00293"></a> 293 rocky20::AAdder&amp; adder = this-&gt;_impl._scalars::template

<a id="l00294" name="l00294"></a> 294 get_scalar&lt;rocky20::AAdder&gt;(scalar_index, this-&gt;element_index);

<a id="l00295" name="l00295"></a> 295\#ifdef \_\_CUDA\_ARCH\_\_

<a id="l00296" name="l00296"></a> 296 adder.add_value&lt;CudaBackend&gt;(value);

<a id="l00297" name="l00297"></a> 297\#else

<a id="l00298" name="l00298"></a> 298 adder.add_value&lt;OMPBackend&gt;(value);

<a id="l00299" name="l00299"></a> 299\#endif

<a id="l00300" name="l00300"></a> 300 }

<a id="l00301" name="l00301"></a> 301 

<a id="l00302" name="l00302"></a> 302 ROCKY_FUNCTIONS

<a id="l00303" name="l00303"></a> 303 void add_value_to_statistics_adder(int scalar_index, double value)

<a id="l00304" name="l00304"></a> 304 {

<a id="l00305" name="l00305"></a> 305 rocky20::AAdder&amp; adder = this-&gt;_impl._scalars::template

<a id="l00306" name="l00306"></a> 306 get_scalar&lt;rocky20::AAdder&gt;(scalar_index, this-&gt;element_index);

<a id="l00307" name="l00307"></a> 307\#ifdef \_\_CUDA\_ARCH\_\_

<a id="l00308" name="l00308"></a> 308 adder.add_value&lt;CudaBackend&gt;(value);

<a id="l00309" name="l00309"></a> 309\#else

<a id="l00310" name="l00310"></a> 310 adder.add_value&lt;OMPBackend&gt;(value);

<a id="l00311" name="l00311"></a> 311\#endif

<a id="l00312" name="l00312"></a> 312 }

<a id="l00313" name="l00313"></a> 313 

<a id="l00317" name="l00317"></a> 317 ROCKY_FUNCTIONS

<a id="l00318" name="l00318"></a> 318 void add_value_to_statistics_accumulator(int scalar_index, double value)

<a id="l00319" name="l00319"></a> 319 {

<a id="l00320" name="l00320"></a> 320 rocky20::AAccumulator&amp; accumulator = this-&gt;_impl._scalars::template

<a id="l00321" name="l00321"></a> 321 get_scalar&lt;rocky20::AAccumulator&gt;(scalar_index, this-&gt;element_index);

<a id="l00322" name="l00322"></a> 322\#ifdef \_\_CUDA\_ARCH\_\_

<a id="l00323" name="l00323"></a> 323 accumulator.add_value&lt;CudaBackend&gt;(value);

<a id="l00324" name="l00324"></a> 324\#else

<a id="l00325" name="l00325"></a> 325 accumulator.add_value&lt;OMPBackend&gt;(value);

<a id="l00326" name="l00326"></a> 326\#endif

<a id="l00327" name="l00327"></a> 327 }

<a id="l00328" name="l00328"></a> 328 

<a id="l00329" name="l00329"></a> 329 [[deprecated("IRockyStatisticsCounter is no longer needed for statistics")]]

<a id="l00330" name="l00330"></a> 330 ROCKY_FUNCTIONS

<a id="l00331" name="l00331"></a> 331 void increment_statistics_counter(int scalar_index)

<a id="l00332" name="l00332"></a> 332 {

<a id="l00333" name="l00333"></a> 333 int&amp; counter =

<a id="l00334" name="l00334"></a> 334 this-&gt;_impl._scalars::template get_scalar&lt;int&gt;(scalar_index, this-&gt;element_index);

<a id="l00335" name="l00335"></a> 335 backend::atomic_add(&amp;counter, 1);

<a id="l00336" name="l00336"></a> 336 }

<a id="l00337" name="l00337"></a> 337 

<a id="l00338" name="l00338"></a> 338 [[deprecated("IRockyStatisticsCounter is no longer needed for statistics")]]

<a id="l00339" name="l00339"></a> 339 ROCKY_FUNCTIONS

<a id="l00340" name="l00340"></a> 340 double get_statistics_count(int scalar_index) const

<a id="l00341" name="l00341"></a> 341 {

<a id="l00342" name="l00342"></a> 342 return this-&gt;_impl._scalars::template get_scalar&lt;int&gt;(scalar_index, this-&gt;element_index);

<a id="l00343" name="l00343"></a> 343 }

<a id="l00344" name="l00344"></a> 344};

<a id="l00345" name="l00345"></a> 345 

[IRockyStatisticsAccumulator](structIRockyStatisticsAccumulator.xhtml)

**Definition** rocky_statistics_data.hpp:181



[IRockyStatisticsAdder](structIRockyStatisticsAdder.xhtml)

**Definition** rocky_statistics_data.hpp:21