Skip to main content

Rocky Solver SDK 2024 R2

rocky_api_cfd_functions

Last update: 17.07.2025
1#pragma once
2
3
4// Functions Prototypes ===========================================================================
5#ifdef __linux__
6#define __stdcall
7#endif
8
9typedef void(__stdcall* cfd_coupling_kernel_f_type)(
10 IRockyModel& model, DeviceParticleGroupData* device_group_data, void** plugin_device_data);
11
12typedef void(__stdcall* cfd_coupling_data_kernel_f_type)(
13 IRockyModel& model, void** plugin_devices_data);
14
15
16// -----------------------------------------------------------------------------------------------
17#define ROCKY_PLUGIN_CFD_COUPLING() \
18 } /* extern "C" closing scope */ \
19 struct _CouplingPlugin {};
20
21// -----------------------------------------------------------------------------------------------
22#define COUPLING_LAW_COEFFICIENT(_coeff) \
23struct _CouplingPlugin_ ## _coeff ## _Operator { \
24 static inline ROCKY_FUNCTIONS double _coeff( \
25 const IRockyParticle& particle, const IRockyCFDProperties& cfd, void *data) \
26 {
27
28
29#define COUPLING_LAW_COEFFICIENT_END(_coeff, _name, _law) \
30}}; \
31 \
32namespace device { \
33template <> \
34auto custom_ ## _name ## _operator<_CouplingPlugin>() \
35 { return device::_law<_CouplingPlugin_ ## _coeff ## _Operator>(); } \
36}
37
38#define COUPLING_LAW_COEFFICIENT_WITH_DEVICE_END(_coeff, _name, _law) \
39}}; \
40 \
41namespace device { \
42template <> \
43auto custom_ ## _name ## _operator<_CouplingPlugin>(SDeviceModel *device_data) \
44 { return device::_law<_CouplingPlugin_ ## _coeff ## _Operator>{ device_data }; } \
45}
46
47// Drag
48// -----------------------------------------------------------------------------------------------
49#define ROCKY_PLUGIN_CFD_COUPLING_DRAG_COEFFICIENT(particle, cfd, data) \
50 COUPLING_LAW_COEFFICIENT(C_D) \
51
52// -----------------------------------------------------------------------------------------------
53#define ROCKY_PLUGIN_CFD_COUPLING_DRAG_COEFFICIENT_END() \
54 COUPLING_LAW_COEFFICIENT_END(C_D, drag, DragParametricOperator) \
55
56// Lift
57// -----------------------------------------------------------------------------------------------
58#define ROCKY_PLUGIN_CFD_COUPLING_LIFT_COEFFICIENT(particle, cfd, data) \
59 COUPLING_LAW_COEFFICIENT(C_L) \
60
61// -----------------------------------------------------------------------------------------------
62#define ROCKY_PLUGIN_CFD_COUPLING_LIFT_COEFFICIENT_END() \
63 COUPLING_LAW_COEFFICIENT_END(C_L, lift, LiftParametricOperator) \
64
65// Virtual Mass
66// -----------------------------------------------------------------------------------------------
67#define ROCKY_PLUGIN_CFD_COUPLING_VIRTUAL_MASS_COEFFICIENT(particle, cfd, data) \
68 COUPLING_LAW_COEFFICIENT(C_VM) \
69
70// -----------------------------------------------------------------------------------------------
71#define ROCKY_PLUGIN_CFD_COUPLING_VIRTUAL_MASS_COEFFICIENT_END() \
72 COUPLING_LAW_COEFFICIENT_WITH_DEVICE_END(C_VM, virtual_mass, VirtualMassParametricOperator) \
73
74// Torque
75// -----------------------------------------------------------------------------------------------
76#define ROCKY_PLUGIN_CFD_COUPLING_TORQUE_COEFFICIENT(particle, cfd, data) \
77 COUPLING_LAW_COEFFICIENT(C_T) \
78
79// -----------------------------------------------------------------------------------------------
80#define ROCKY_PLUGIN_CFD_COUPLING_TORQUE_COEFFICIENT_END() \
81 COUPLING_LAW_COEFFICIENT_END(C_T, torque, TorqueParametricOperator) \
82
83// Heat Convection
84// -----------------------------------------------------------------------------------------------
85#define ROCKY_PLUGIN_CFD_COUPLING_NUSSELT_NUMBER(particle, cfd, data) \
86 COUPLING_LAW_COEFFICIENT(Nu) \
87
88// -----------------------------------------------------------------------------------------------
89#define ROCKY_PLUGIN_CFD_COUPLING_NUSSELT_NUMBER_END() \
90 COUPLING_LAW_COEFFICIENT_WITH_DEVICE_END(Nu, convection, HeatConvectionParametricOperator) \
91
92// -----------------------------------------------------------------------------------------------
93#define ROCKY_PLUGIN_CFD_COUPLING_KERNEL(scope) \
94 extern "C" ROCKYAPI_EXPORT void scope ## _dispatch_cfd_coupling_kernel( \
95 IRockyModel &model, \
96 DeviceParticleGroupData* device_group_data, \
97 void **plugin_device_data) \
98 { \
99 rocky::scope::select_and_dispatch_cfd_coupling_kernel<_CouplingPlugin>( \
100 model, device_group_data, \
101 plugin_device_data); \
102 }
103
104
105// -----------------------------------------------------------------------------------------------
106#define ROCKY_PLUGIN_ON_FLUID(model, particle, cfd, data, step_name) \
107 struct step_name ## _Operator { \
108 ROCKY_FUNCTIONS void operator()( \
109 IRockyDeviceModel &model, \
110 IRockyParticle& particle, const IRockyCFDProperties& cfd, void *data) {
111
112#define ROCKY_PLUGIN_ON_FLUID_END() }}; \
113
114#define ROCKY_PLUGIN_ON_FLUID_KERNEL(step_name, scope) \
115 extern "C" ROCKYAPI_EXPORT void scope ## _ ## step_name ## _on_fluid_kernel( \
116 IRockyModel &model, \
117 void **plugin_device_data) \
118 { \
119 rocky::scope::dispatch_fluid_kernel(model, step_name ## _Operator(), plugin_device_data); \
120 }
121
122
123#define ROCKY_PLUGIN_PRE_FORCE_ON_FLUID(model, particle, cfd, data) \
124 ROCKY_PLUGIN_ON_FLUID(model, particle, cfd, data, pre_force)
125
126#define ROCKY_PLUGIN_POST_FORCE_ON_FLUID(model, particle, cfd, data) \
127 ROCKY_PLUGIN_ON_FLUID(model, particle, cfd, data, post_force)
128
129#define ROCKY_PLUGIN_PRE_MOVE_ON_FLUID(model, particle, cfd, data) \
130 ROCKY_PLUGIN_ON_FLUID(model, particle, cfd, data, pre_move)
131
132#define ROCKY_PLUGIN_POST_MOVE_ON_FLUID(model, particle, cfd, data) \
133 ROCKY_PLUGIN_ON_FLUID(model, particle, cfd, data, post_move)
134
135#ifdef ROCKY_CUDA_API
136
137#define ROCKY_PLUGIN_PRE_FORCE_ON_FLUID_END() \
138 ROCKY_PLUGIN_ON_FLUID_END() \
139 ROCKY_PLUGIN_ON_FLUID_KERNEL(pre_force, omp) \
140 ROCKY_PLUGIN_ON_FLUID_KERNEL(pre_force, cuda)
141
142#define ROCKY_PLUGIN_POST_FORCE_ON_FLUID_END() \
143 ROCKY_PLUGIN_ON_FLUID_END() \
144 ROCKY_PLUGIN_ON_FLUID_KERNEL(post_force, omp) \
145 ROCKY_PLUGIN_ON_FLUID_KERNEL(post_force, cuda)
146
147#define ROCKY_PLUGIN_PRE_MOVE_ON_FLUID_END() \
148 ROCKY_PLUGIN_ON_FLUID_END() \
149 ROCKY_PLUGIN_ON_FLUID_KERNEL(pre_move, omp) \
150 ROCKY_PLUGIN_ON_FLUID_KERNEL(pre_move, cuda)
151
152#define ROCKY_PLUGIN_POST_MOVE_ON_FLUID_END() \
153 ROCKY_PLUGIN_ON_FLUID_END() \
154 ROCKY_PLUGIN_ON_FLUID_KERNEL(post_move, omp) \
155 ROCKY_PLUGIN_ON_FLUID_KERNEL(post_move, cuda)
156
157#else
158
159#define ROCKY_PLUGIN_PRE_FORCE_ON_FLUID_END() \
160 ROCKY_PLUGIN_ON_FLUID_END() \
161 ROCKY_PLUGIN_ON_FLUID_KERNEL(pre_force, omp)
162
163#define ROCKY_PLUGIN_POST_FORCE_ON_FLUID_END() \
164 ROCKY_PLUGIN_ON_FLUID_END() \
165 ROCKY_PLUGIN_ON_FLUID_KERNEL(post_force, omp)
166
167#define ROCKY_PLUGIN_PRE_MOVE_ON_FLUID_END() \
168 ROCKY_PLUGIN_ON_FLUID_END() \
169 ROCKY_PLUGIN_ON_FLUID_KERNEL(pre_move, omp)
170
171#define ROCKY_PLUGIN_POST_MOVE_ON_FLUID_END() \
172 ROCKY_PLUGIN_ON_FLUID_END() \
173 ROCKY_PLUGIN_ON_FLUID_KERNEL(post_move, omp)
174
175#endif
176
177
178#ifndef ROCKY_CUDA_API
179
180// -----------------------------------------------------------------------------------------------
181#define ROCKY_PLUGIN_CFD_COUPLING_END() \
182 ROCKY_PLUGIN_CFD_COUPLING_KERNEL(omp) \
183 extern "C" {
184
185#else
186
187// -----------------------------------------------------------------------------------------------
188#define ROCKY_PLUGIN_CFD_COUPLING_END() \
189 ROCKY_PLUGIN_CFD_COUPLING_KERNEL(omp) \
190 ROCKY_PLUGIN_CFD_COUPLING_KERNEL(cuda) \
191 extern "C" {
192
193#endif
Definition rocky_api.h:60

Connect with Ansys