Skip to main content

Rocky Solver SDK 2024 R2

rocky_sph_element_scalars

Last update: 17.07.2025
1#pragma once
2
3// Includes =======================================================================================
4#include "../rocky_scalars.h"
5#include <rocky20/sph/sph_particle_scalars.h>
6
7using rocky20::KnownSPHParticleScalars;
8
9// Forward declarations ===========================================================================
10class cuda_host;
11struct SPHDeviceModel;
12typedef cuda_host RockyModel;
13
14enum ESPHOperationType
15{
16 sphotReset,
17 sphotSum,
18 sphotUpdate
19};
20
28struct IRockySPHElementScalarsModel : ScalarsModel<rocky20::SPHParticleScalarsController>
29{
30 // Scalars Operations ------------------------------------------------------------------------
31
81 void set_operation(int scalar_index, ESPHOperationType operation, ESPHOperationPlace place);
82
83#ifdef ONLY_FOR_DOXYGEN
84
86 int find(const char* name);
87
89 void reset(int scalar_index);
90
92 void set_dimension(int scalar_index, double dimension_factor);
93
94#endif
95
97 template <class _data_type = float>
98 int add(const char* name, const char* unit, bool output = true)
99 {
100 // By definition, SPH Scalars are default-typed accumulation for mGPU combine operations.
101 // Although, this is a convention that must be enforced by a set_operation call indicating
102 // where the accumulation/sum must occur.
103 return this->_impl.template add_scalars<_data_type>(
104 name, unit, rocky20::ScalarsInfo::cotAccumulateOnDemand, output);
105 }
106
109 IRockySPHElementScalarsModel(SPHModel* sph_model, const std::vector<int>& device_ids);
110
112};
113
120struct IRockySPHElementScalars : EntityScalars<rocky20::SPHParticleScalars>
121{
123 using base_type = EntityScalars<rocky20::SPHParticleScalars>;
126 // get ----------------------------------------------------------------------------------------
127
129 template <class _data_type = float>
130 ROCKY_FUNCTIONS _data_type get_scalar(int scalar_index) const
131 {
132 return base_type::get_scalar<_data_type>(scalar_index);
133 }
134
140 ROCKY_FUNCTIONS inline float get_turbulent_viscosity() const
141 {
142 return this->get_known_scalar<float>(KnownSPHParticleScalars::TurbulentViscosity);
143 }
144
150 ROCKY_FUNCTIONS inline float get_temperature() const
151 {
152 return this->get_known_scalar<float>(KnownSPHParticleScalars::Temperature);
153 }
154
160 ROCKY_FUNCTIONS inline float get_heat_transfer() const
161 {
162 return this->get_known_scalar<float>(KnownSPHParticleScalars::HeatTransferRate);
163 }
164
165 // set ----------------------------------------------------------------------------------------
166
168 template <class _data_type = float>
169 ROCKY_FUNCTIONS void set_scalar(int scalar_index, _data_type value) const
170 {
171 base_type::set_scalar<_data_type>(scalar_index, value);
172 }
173
180 ROCKY_FUNCTIONS inline void set_turbulent_viscosity(const float value)
181 {
182 this->get_known_scalar<float>(KnownSPHParticleScalars::TurbulentViscosity) = value;
183 }
184
191 ROCKY_FUNCTIONS inline void set_temperature(const float value)
192 {
193 this->get_known_scalar<float>(KnownSPHParticleScalars::Temperature) = value;
194 }
195
202 ROCKY_FUNCTIONS inline void set_heat_transfer(const float value)
203 {
204 this->get_known_scalar<float>(KnownSPHParticleScalars::HeatTransferRate) = value;
205 }
206
207 // add ----------------------------------------------------------------------------------------
208
210 template <class _data_type = float>
211 ROCKY_FUNCTIONS void add_scalar(int scalar_index, _data_type value) const
212 {
213 base_type::add_scalar<_data_type>(scalar_index, value);
214 }
215
221 ROCKY_FUNCTIONS inline void add_turbulent_viscosity(const float value)
222 {
223 this->add_known_scalar(KnownSPHParticleScalars::TurbulentViscosity, value);
224 }
225
231 ROCKY_FUNCTIONS inline void add_temperature(const float value)
232 {
233 this->add_known_scalar(KnownSPHParticleScalars::Temperature, value);
234 }
235
243 ROCKY_FUNCTIONS inline void add_heat_transfer(const float value)
244 {
245 this->add_known_scalar(KnownSPHParticleScalars::HeatTransferRate, value);
246 }
247
248 // max ----------------------------------------------------------------------------------------
249
251 template <class _data_type = float>
252 ROCKY_FUNCTIONS void max_scalar(int scalar_index, _data_type value) const
253 {
254 base_type::max_scalar<_data_type>(scalar_index, value);
255 }
256
259 ROCKY_FUNCTIONS IRockySPHElementScalars(
260 rocky20::SPHParticleScalars& _scalars, int _element_index)
261 : EntityScalars<rocky20::SPHParticleScalars>(_scalars, _element_index)
262 {
263 }
264
266};
Definition rocky_sph_element_scalars.hpp:29
int find(const char *name)
void set_dimension(int scalar_index, double dimension_factor)
void set_operation(int scalar_index, ESPHOperationType operation, ESPHOperationPlace place)
Definition rocky_sph_element_scalars.cpp:10
void reset(int scalar_index)
int add(const char *name, const char *unit, bool output=true)
Definition rocky_sph_element_scalars.hpp:98
Definition rocky_sph_element_scalars.hpp:121
ROCKY_FUNCTIONS void add_turbulent_viscosity(const float value)
Definition rocky_sph_element_scalars.hpp:221
ROCKY_FUNCTIONS void set_scalar(int scalar_index, _data_type value) const
Definition rocky_sph_element_scalars.hpp:169
ROCKY_FUNCTIONS void add_scalar(int scalar_index, _data_type value) const
Definition rocky_sph_element_scalars.hpp:211
ROCKY_FUNCTIONS float get_heat_transfer() const
Definition rocky_sph_element_scalars.hpp:160
ROCKY_FUNCTIONS void set_temperature(const float value)
Definition rocky_sph_element_scalars.hpp:191
ROCKY_FUNCTIONS float get_temperature() const
Definition rocky_sph_element_scalars.hpp:150
ROCKY_FUNCTIONS void add_heat_transfer(const float value)
Definition rocky_sph_element_scalars.hpp:243
ROCKY_FUNCTIONS _data_type get_scalar(int scalar_index) const
Definition rocky_sph_element_scalars.hpp:130
ROCKY_FUNCTIONS void add_temperature(const float value)
Definition rocky_sph_element_scalars.hpp:231
ROCKY_FUNCTIONS void set_turbulent_viscosity(const float value)
Definition rocky_sph_element_scalars.hpp:180
ROCKY_FUNCTIONS void max_scalar(int scalar_index, _data_type value) const
Definition rocky_sph_element_scalars.hpp:252
ROCKY_FUNCTIONS void set_heat_transfer(const float value)
Definition rocky_sph_element_scalars.hpp:202
ROCKY_FUNCTIONS float get_turbulent_viscosity() const
Definition rocky_sph_element_scalars.hpp:140

Connect with Ansys