Skip to main content

Rocky Solver SDK 2024 R2

rocky_api_sph_functions

Last update: 17.07.2025
1#pragma once
2
3// Forward declarations ===========================================================================
4struct IRockySPHModel;
10struct IRockyModel;
12
13typedef float real_sph;
14typedef float3 real_sph3;
15
16#include <rocky20/sph/sph_iterators.hpp>
17
18// Functions Prototypes ===========================================================================
19#ifdef __linux__
20 #define __stdcall
21#endif
22
23#define SPH_MAX_PRE_FORCE_PASSES 5
24#define SPH_MAX_POST_FORCE_PASSES 5
25#define SPH_MAX_PRE_MOVE_PASSES 5
26#define SPH_MAX_POST_MOVE_PASSES 5
27
28// On SPH elements
29typedef void(__stdcall* sph_element_f_type)(
30 IRockyDeviceModel& model,
31 IRockySPHDeviceModel& sph_model,
32 IRockySPHElement& sph_element,
33 void* data);
34typedef real_sph3(__stdcall* sph_element_force_f_type)(
35 IRockyDeviceModel& model,
36 IRockySPHDeviceModel& sph_model,
37 IRockySPHElement& sph_element,
38 void* data);
39typedef void(__stdcall* cuda_sph_element_kernel_f_type)(
40 IRockyModel& model, void** plugin_devices_data);
41typedef void(__stdcall* sph_element_kernel_f_type)(IRockyModel& model, void* plugin_devices_data);
42
43// On SPH Interactions
44typedef void(__stdcall* sph_element_interaction_f_type)(
45 IRockyDeviceModel& model,
46 IRockySPHDeviceModel& sph_model,
47 IRockySPHElementInteraction& sph_interaction,
48 void* data);
49typedef void(__stdcall* sph_triangle_interaction_f_type)(
50 IRockyDeviceModel& model,
51 IRockySPHDeviceModel& sph_model,
52 IRockySPHTriangleInteraction& sph_interaction,
53 void* data);
54typedef real_sph(__stdcall* sph_element_interaction_heat_f_type)(
55 IRockyDeviceModel& model,
56 IRockySPHDeviceModel& sph_model,
57 IRockySPHElementInteraction& sph_interaction,
58 void* data);
59typedef real_sph(__stdcall* sph_triangle_interaction_heat_f_type)(
60 IRockyDeviceModel& model,
61 IRockySPHDeviceModel& sph_model,
62 IRockySPHTriangleInteraction& sph_interaction,
63 void* data);
64typedef real_sph3(__stdcall* sph_element_interaction_force_f_type)(
65 IRockyDeviceModel& model,
66 IRockySPHDeviceModel& sph_model,
67 IRockySPHElementInteraction& sph_interaction,
68 void* data);
69typedef real_sph3(__stdcall* sph_triangle_interaction_force_f_type)(
70 IRockyDeviceModel& model,
71 IRockySPHDeviceModel& sph_model,
72 IRockySPHTriangleInteraction& sph_interaction,
73 void* data);
74typedef void(__stdcall* cuda_sph_interaction_kernel_f_type)(
75 IRockyModel& model, void** plugin_devices_data);
76
77typedef void(__stdcall* cuda_sph_element_interaction_kernel_f_type)(
78 IRockyModel& model, void** plugin_devices_data, IterationType it_type);
79
80// Initialization SPH elements
81typedef void(__stdcall* initialize_sph_element_f_type)(
82 IRockyModel& model, IRockySPHModel& sph_model, IRockySPHElementHost& element, void* data);
83
84// MACROS ==========================================================================================
85
86#define ROCKY_PLUGIN_SPH() ROCKYAPI_EXPORT bool is_sph_module = true;
87
88#define ROCKY_PLUGIN_SPH_END()
89
90#ifdef ROCKY_CUDA_API
91 #define ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(func_name) \
92 struct f_##func_name##_type \
93 { \
94 ROCKY_FUNCTIONS void operator()( \
95 IRockyDeviceModel& model, \
96 IRockySPHDeviceModel& sph_model, \
97 IRockySPHElement& sph_element, \
98 void* data) \
99 { \
100 func_name(model, sph_model, sph_element, data); \
101 } \
102 }; \
103 \
104 extern "C" ROCKYAPI_EXPORT void cuda_##func_name##_kernel( \
105 IRockyModel& model, void** plugin_device_data) \
106 { \
107 f_##func_name##_type device_functor {}; \
108 rocky::cuda::dispatch_sph_elements_kernel(model, device_functor, plugin_device_data); \
109 }
110
111 #define ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(func_name) \
112 struct f_##func_name##_element \
113 { \
114 ROCKY_FUNCTIONS void operator()( \
115 IRockyDeviceModel& model, \
116 IRockySPHDeviceModel& sph_model, \
117 IRockySPHElementInteraction& sph_interaction, \
118 void* data) \
119 { \
120 func_name(model, sph_model, sph_interaction, data); \
121 } \
122 }; \
123 \
124 extern "C" ROCKYAPI_EXPORT void cuda_##func_name##_kernel( \
125 IRockyModel& model, void** plugin_device_data) \
126 { \
127 f_##func_name##_element device_functor {}; \
128 rocky::cuda::dispatch_sph_interactions_elements_kernel( \
129 model, device_functor, plugin_device_data); \
130 }
131
132 #define ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(func_name) \
133 struct f_##func_name##_triangle \
134 { \
135 ROCKY_FUNCTIONS void operator()( \
136 IRockyDeviceModel& model, \
137 IRockySPHDeviceModel& sph_model, \
138 IRockySPHTriangleInteraction& sph_interaction, \
139 void* data) \
140 { \
141 func_name(model, sph_model, sph_interaction, data); \
142 } \
143 }; \
144 \
145 extern "C" ROCKYAPI_EXPORT void cuda_##func_name##_kernel( \
146 IRockyModel& model, void** plugin_device_data) \
147 { \
148 f_##func_name##_triangle device_functor {}; \
149 rocky::cuda::dispatch_sph_interactions_triangles_kernel( \
150 model, device_functor, plugin_device_data); \
151 }
152
153 #define ROCKY_PLUGIN_SPH_ELEMENT_WITH_RETURN_CUDA_KERNEL( \
154 func_name, return_type, operator_name) \
155 struct f_##func_name##_element \
156 { \
157 ROCKY_FUNCTIONS return_type operator()( \
158 IRockyDeviceModel& model, \
159 IRockySPHDeviceModel& sph_model, \
160 IRockySPHElementInteraction& sph_interaction, \
161 void* data) \
162 { \
163 return func_name(model, sph_model, sph_interaction, data); \
164 } \
165 }; \
166 \
167 extern "C" ROCKYAPI_EXPORT void cuda_##func_name##_kernel( \
168 IRockyModel& model, void** plugin_device_data, IterationType it_type = itAll) \
169 { \
170 f_##func_name##_element device_functor {}; \
171 rocky::cuda::dispatch_sph_interactions_elements_kernel< \
172 device::operator_name<CudaBackend>>( \
173 model, device_functor, plugin_device_data, it_type); \
174 }
175
176 #define ROCKY_PLUGIN_SPH_TRIANGLE_WITH_RETURN_CUDA_KERNEL( \
177 func_name, return_type, operator_name) \
178 struct f_##func_name##_triangle \
179 { \
180 ROCKY_FUNCTIONS return_type operator()( \
181 IRockyDeviceModel& model, \
182 IRockySPHDeviceModel& sph_model, \
183 IRockySPHTriangleInteraction& sph_interaction, \
184 void* data) \
185 { \
186 return func_name(model, sph_model, sph_interaction, data); \
187 } \
188 }; \
189 \
190 extern "C" ROCKYAPI_EXPORT void cuda_##func_name##_kernel( \
191 IRockyModel& model, void** plugin_device_data) \
192 { \
193 f_##func_name##_triangle device_functor {}; \
194 rocky::cuda::dispatch_sph_interactions_triangles_kernel< \
195 device::operator_name<CudaBackend>>(model, device_functor, plugin_device_data); \
196 }
197
198#endif
199
200// FORCE_SPH =======================================================================================
201
202#define ROCKY_PLUGIN_FORCE_ON_SPH_ELEMENT_INTERACTIONS(model, sph_model, sph_interaction, data) \
203 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void compute_sph_forces_elements( \
204 IRockyDeviceModel& model, \
205 IRockySPHDeviceModel& sph_model, \
206 IRockySPHElementInteraction& sph_interaction, \
207 void* data) \
208 {
209#ifndef ROCKY_CUDA_API
210 #define ROCKY_PLUGIN_FORCE_ON_SPH_ELEMENT_INTERACTIONS_END() }
211#else
212 #define ROCKY_PLUGIN_FORCE_ON_SPH_ELEMENT_INTERACTIONS_END() \
213 } \
214 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(compute_sph_forces_elements)
215#endif
216
217#define ROCKY_PLUGIN_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(model, sph_model, sph_interaction, data) \
218 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void compute_sph_forces_triangles( \
219 IRockyDeviceModel& model, \
220 IRockySPHDeviceModel& sph_model, \
221 IRockySPHTriangleInteraction& sph_interaction, \
222 void* data) \
223 {
224#ifndef ROCKY_CUDA_API
225 #define ROCKY_PLUGIN_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_END() }
226#else
227 #define ROCKY_PLUGIN_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_END() \
228 } \
229 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(compute_sph_forces_triangles)
230#endif
231
232// HEAT_TRANSFER_SPH ==============================================================================
233
234#define ROCKY_PLUGIN_HEAT_TRANSFER_ON_SPH_ELEMENT_INTERACTIONS( \
235 model, sph_model, sph_interaction, data) \
236 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS real_sph compute_sph_heat_transfer_elements( \
237 IRockyDeviceModel& model, \
238 IRockySPHDeviceModel& sph_model, \
239 IRockySPHElementInteraction& sph_interaction, \
240 void* data) \
241 {
242#ifndef ROCKY_CUDA_API
243 #define ROCKY_PLUGIN_HEAT_TRANSFER_ON_SPH_ELEMENT_INTERACTIONS_END() }
244#else
245 #define ROCKY_PLUGIN_HEAT_TRANSFER_ON_SPH_ELEMENT_INTERACTIONS_END() \
246 } \
247 ROCKY_PLUGIN_SPH_ELEMENT_WITH_RETURN_CUDA_KERNEL( \
248 compute_sph_heat_transfer_elements, real_sph, HeatTransferElementsOperator)
249#endif
250
251#define ROCKY_PLUGIN_HEAT_TRANSFER_ON_SPH_TRIANGLE_INTERACTIONS( \
252 model, sph_model, sph_interaction, data) \
253 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS real_sph compute_sph_heat_transfer_triangles( \
254 IRockyDeviceModel& model, \
255 IRockySPHDeviceModel& sph_model, \
256 IRockySPHTriangleInteraction& sph_interaction, \
257 void* data) \
258 {
259#ifndef ROCKY_CUDA_API
260 #define HeatTransferTrianglesOperator() }
261#else
262 #define ROCKY_PLUGIN_HEAT_TRANSFER_ON_SPH_TRIANGLE_INTERACTIONS_END() \
263 } \
264 ROCKY_PLUGIN_SPH_TRIANGLE_WITH_RETURN_CUDA_KERNEL( \
265 compute_sph_heat_transfer_triangles, real_sph, HeatTransferTrianglesOperator)
266#endif
267
268// SURFACE_TENSION_SPH ============================================================================
269
270#define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_ELEMENTS(model, sph_model, sph_element, data) \
271 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS real_sph3 compute_sph_surface_tension( \
272 IRockyDeviceModel& model, \
273 IRockySPHDeviceModel& sph_model, \
274 IRockySPHElement& sph_element, \
275 void* data) \
276 {
277#ifndef ROCKY_CUDA_API
278 #define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_ELEMENTS_END() }
279#else
280 #define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_ELEMENTS_END() \
281 } \
282 ROCKY_PLUGIN_SPH_ELEMENT_WITH_RETURN_CUDA_KERNEL( \
283 compute_sph_surface_tension, \
284 real_sph3, \
285 ForceElementOperator)
286#endif
287
288#define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_ELEMENT_INTERACTIONS( \
289 model, sph_model, sph_interaction, data) \
290 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS real_sph3 compute_sph_surface_tension_elements( \
291 IRockyDeviceModel& model, \
292 IRockySPHDeviceModel& sph_model, \
293 IRockySPHElementInteraction& sph_interaction, \
294 void* data) \
295 {
296#ifndef ROCKY_CUDA_API
297 #define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_ELEMENT_INTERACTIONS_END() }
298#else
299 #define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_ELEMENT_INTERACTIONS_END() \
300 } \
301 ROCKY_PLUGIN_SPH_ELEMENT_WITH_RETURN_CUDA_KERNEL( \
302 compute_sph_surface_tension_elements, \
303 real_sph3, \
304 ForceElementInteractionOperator)
305#endif
306
307#define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_TRIANGLE_INTERACTIONS( \
308 model, sph_model, sph_interaction, data) \
309 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS real_sph3 compute_sph_surface_tension_triangles( \
310 IRockyDeviceModel& model, \
311 IRockySPHDeviceModel& sph_model, \
312 IRockySPHTriangleInteraction& sph_interaction, \
313 void* data) \
314 {
315#ifndef ROCKY_CUDA_API
316 #define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_TRIANGLE_INTERACTIONS_END() }
317#else
318 #define ROCKY_PLUGIN_SURFACE_TENSION_ON_SPH_TRIANGLE_INTERACTIONS_END() \
319 } \
320 ROCKY_PLUGIN_SPH_TRIANGLE_WITH_RETURN_CUDA_KERNEL( \
321 compute_sph_surface_tension_triangles, \
322 real_sph3, \
323 ForceTriangleInteractionOperator)
324#endif
325
326// VISCOUS_ACCELERATIONS_SPH =======================================================================
327
328#define ROCKY_PLUGIN_VISCOUS_ACCELERATIONS_ON_SPH_ELEMENT_INTERACTIONS( \
329 model, sph_model, sph_interaction, data) \
330 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS real_sph3 \
331 compute_sph_viscous_accelerations_elements( \
332 IRockyDeviceModel& model, \
333 IRockySPHDeviceModel& sph_model, \
334 IRockySPHElementInteraction& sph_interaction, \
335 void* data) \
336 {
337#ifndef ROCKY_CUDA_API
338 #define ROCKY_PLUGIN_VISCOUS_ACCELERATIONS_ON_SPH_ELEMENT_INTERACTIONS_END() }
339#else
340 #define ROCKY_PLUGIN_VISCOUS_ACCELERATIONS_ON_SPH_ELEMENT_INTERACTIONS_END() \
341 } \
342 ROCKY_PLUGIN_SPH_ELEMENT_WITH_RETURN_CUDA_KERNEL( \
343 compute_sph_viscous_accelerations_elements, \
344 real_sph3, \
345 ForceElementInteractionOperator)
346#endif
347
348#define ROCKY_PLUGIN_VISCOUS_ACCELERATIONS_ON_SPH_TRIANGLE_INTERACTIONS( \
349 model, sph_model, sph_interaction, data) \
350 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS real_sph3 \
351 compute_sph_viscous_accelerations_triangles( \
352 IRockyDeviceModel& model, \
353 IRockySPHDeviceModel& sph_model, \
354 IRockySPHTriangleInteraction& sph_interaction, \
355 void* data) \
356 {
357#ifndef ROCKY_CUDA_API
358 #define ROCKY_PLUGIN_VISCOUS_ACCELERATIONS_ON_SPH_TRIANGLE_INTERACTIONS_END() }
359#else
360 #define ROCKY_PLUGIN_VISCOUS_ACCELERATIONS_ON_SPH_TRIANGLE_INTERACTIONS_END() \
361 } \
362 ROCKY_PLUGIN_SPH_TRIANGLE_WITH_RETURN_CUDA_KERNEL( \
363 compute_sph_viscous_accelerations_triangles, \
364 real_sph3, \
365 ForceTriangleInteractionOperator)
366#endif
367
368// PREFIX_FORCE_ON_SPH ----------------------------------------------------------------------------
369
370#define PREFIX_FORCE_ON_SPH_ELEMENTS(prefix, index, model, sph_model, sph_element, data) \
371 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void prefix##_force_on_elements_##index( \
372 IRockyDeviceModel& model, \
373 IRockySPHDeviceModel& sph_model, \
374 IRockySPHElement& sph_element, \
375 void* data) \
376 {
377#define PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS( \
378 prefix, index, model, sph_model, sph_interaction, data) \
379 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void \
380 prefix##_force_on_element_interactions_##index( \
381 IRockyDeviceModel& model, \
382 IRockySPHDeviceModel& sph_model, \
383 IRockySPHElementInteraction& sph_interaction, \
384 void* data) \
385 {
386#define PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS( \
387 prefix, index, model, sph_model, sph_interaction, data) \
388 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void \
389 prefix##_force_on_triangle_interactions_##index( \
390 IRockyDeviceModel& model, \
391 IRockySPHDeviceModel& sph_model, \
392 IRockySPHTriangleInteraction& sph_interaction, \
393 void* data) \
394 {
395// PRE_FORCE_ON_SPH_ELEMENTS ----------------------------------------------------------------------
396
397#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS(model, sph_model, sph_element, data) \
398 PREFIX_FORCE_ON_SPH_ELEMENTS(pre, 0, model, sph_model, sph_element, data)
399
400#ifndef ROCKY_CUDA_API
401 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_END() }
402#else
403 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_END() \
404 } \
405 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_force_on_elements_0)
406#endif
407
408#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_1(model, sph_model, sph_element, data) \
409 PREFIX_FORCE_ON_SPH_ELEMENTS(pre, 1, model, sph_model, sph_element, data)
410
411#ifndef ROCKY_CUDA_API
412 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_1_END() }
413#else
414 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_1_END() \
415 } \
416 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_force_on_elements_1)
417#endif
418
419#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_2(model, sph_model, sph_element, data) \
420 PREFIX_FORCE_ON_SPH_ELEMENTS(pre, 2, model, sph_model, sph_element, data)
421
422#ifndef ROCKY_CUDA_API
423 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_2_END() }
424#else
425 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_2_END() \
426 } \
427 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_force_on_elements_2)
428#endif
429
430#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_3(model, sph_model, sph_element, data) \
431 PREFIX_FORCE_ON_SPH_ELEMENTS(pre, 3, model, sph_model, sph_element, data)
432
433#ifndef ROCKY_CUDA_API
434 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_3_END() }
435#else
436 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_3_END() \
437 } \
438 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_force_on_elements_3)
439#endif
440
441#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_4(model, sph_model, sph_element, data) \
442 PREFIX_FORCE_ON_SPH_ELEMENTS(pre, 4, model, sph_model, sph_element, data)
443
444#ifndef ROCKY_CUDA_API
445 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_4_END() }
446#else
447 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENTS_4_END() \
448 } \
449 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_force_on_elements_4)
450#endif
451
452// PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS ----------------------------------------------------------
453
454#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS( \
455 model, sph_model, sph_interaction, data) \
456 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(pre, 0, model, sph_model, sph_interaction, data)
457
458#ifndef ROCKY_CUDA_API
459 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_END() }
460#else
461 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_END() \
462 } \
463 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_force_on_element_interactions_0)
464#endif
465
466#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_1( \
467 model, sph_model, sph_interaction, data) \
468 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(pre, 1, model, sph_model, sph_interaction, data)
469
470#ifndef ROCKY_CUDA_API
471 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_1_END() }
472#else
473 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_1_END() \
474 } \
475 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_force_on_element_interactions_1)
476#endif
477
478#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_2( \
479 model, sph_model, sph_interaction, data) \
480 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(pre, 2, model, sph_model, sph_interaction, data)
481
482#ifndef ROCKY_CUDA_API
483 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_2_END() }
484#else
485 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_2_END() \
486 } \
487 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_force_on_element_interactions_2)
488#endif
489
490#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_3( \
491 model, sph_model, sph_interaction, data) \
492 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(pre, 3, model, sph_model, sph_interaction, data)
493
494#ifndef ROCKY_CUDA_API
495 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_3_END() }
496#else
497 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_3_END() \
498 } \
499 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_force_on_element_interactions_3)
500#endif
501
502#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_4( \
503 model, sph_model, sph_interaction, data) \
504 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(pre, 4, model, sph_model, sph_interaction, data)
505
506#ifndef ROCKY_CUDA_API
507 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_4_END() }
508#else
509 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_ELEMENT_INTERACTIONS_4_END() \
510 } \
511 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_force_on_element_interactions_4)
512#endif
513
514// PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS ----------------------------------------------------------
515
516#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS( \
517 model, sph_model, sph_interaction, data) \
518 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 0, model, sph_model, sph_interaction, data)
519
520#ifndef ROCKY_CUDA_API
521 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_END() }
522#else
523 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_END() \
524 } \
525 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_force_on_triangle_interactions_0)
526#endif
527
528#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_1( \
529 model, sph_model, sph_interaction, data) \
530 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 1, model, sph_model, sph_interaction, data)
531
532#ifndef ROCKY_CUDA_API
533 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() }
534#else
535 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() \
536 } \
537 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_force_on_triangle_interactions_1)
538#endif
539
540#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_2( \
541 model, sph_model, sph_interaction, data) \
542 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 2, model, sph_model, sph_interaction, data)
543
544#ifndef ROCKY_CUDA_API
545 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() }
546#else
547 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() \
548 } \
549 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_force_on_triangle_interactions_2)
550#endif
551
552#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_3( \
553 model, sph_model, sph_interaction, data) \
554 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 3, model, sph_model, sph_interaction, data)
555
556#ifndef ROCKY_CUDA_API
557 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() }
558#else
559 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() \
560 } \
561 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_force_on_triangle_interactions_3)
562#endif
563
564#define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_4( \
565 model, sph_model, sph_interaction, data) \
566 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 4, model, sph_model, sph_interaction, data)
567
568#ifndef ROCKY_CUDA_API
569 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() }
570#else
571 #define ROCKY_PLUGIN_PRE_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() \
572 } \
573 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_force_on_triangle_interactions_4)
574#endif
575
576// POST_FORCE_ON_SPH_ELEMENTS ---------------------------------------------------------------------
577
578#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS(model, sph_model, sph_element, data) \
579 PREFIX_FORCE_ON_SPH_ELEMENTS(post, 0, model, sph_model, sph_element, data)
580
581#ifndef ROCKY_CUDA_API
582 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_END() }
583#else
584 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_END() \
585 } \
586 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_force_on_elements_0)
587#endif
588
589#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_1(model, sph_model, sph_element, data) \
590 PREFIX_FORCE_ON_SPH_ELEMENTS(post, 1, model, sph_model, sph_element, data)
591
592#ifndef ROCKY_CUDA_API
593 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_1_END() }
594#else
595 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_1_END() \
596 } \
597 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_force_on_elements_1)
598#endif
599
600#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_2(model, sph_model, sph_element, data) \
601 PREFIX_FORCE_ON_SPH_ELEMENTS(post, 2, model, sph_model, sph_element, data)
602
603#ifndef ROCKY_CUDA_API
604 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_2_END() }
605#else
606 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_2_END() \
607 } \
608 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_force_on_elements_2)
609#endif
610
611#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_3(model, sph_model, sph_element, data) \
612 PREFIX_FORCE_ON_SPH_ELEMENTS(post, 3, model, sph_model, sph_element, data)
613
614#ifndef ROCKY_CUDA_API
615 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_3_END() }
616#else
617 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_3_END() \
618 } \
619 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_force_on_elements_3)
620#endif
621
622#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_4(model, sph_model, sph_element, data) \
623 PREFIX_FORCE_ON_SPH_ELEMENTS(post, 4, model, sph_model, sph_element, data)
624
625#ifndef ROCKY_CUDA_API
626 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_4_END() }
627#else
628 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENTS_4_END() \
629 } \
630 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_force_on_elements_4)
631#endif
632
633// POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS ---------------------------------------------------------
634
635#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS( \
636 model, sph_model, sph_interaction, data) \
637 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(post, 0, model, sph_model, sph_interaction, data)
638
639#ifndef ROCKY_CUDA_API
640 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_END() }
641#else
642 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_END() \
643 } \
644 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_force_on_element_interactions_0)
645#endif
646
647#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_1( \
648 model, sph_model, sph_interaction, data) \
649 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(post, 1, model, sph_model, sph_interaction, data)
650
651#ifndef ROCKY_CUDA_API
652 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_1_END() }
653#else
654 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_1_END() \
655 } \
656 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_force_on_element_interactions_1)
657#endif
658
659#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_2( \
660 model, sph_model, sph_interaction, data) \
661 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(post, 2, model, sph_model, sph_interaction, data)
662
663#ifndef ROCKY_CUDA_API
664 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_2_END() }
665#else
666 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_2_END() \
667 } \
668 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_force_on_element_interactions_2)
669#endif
670
671#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_3( \
672 model, sph_model, sph_interaction, data) \
673 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(post, 3, model, sph_model, sph_interaction, data)
674
675#ifndef ROCKY_CUDA_API
676 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_3_END() }
677#else
678 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_3_END() \
679 } \
680 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_force_on_element_interactions_3)
681#endif
682
683#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_4( \
684 model, sph_model, sph_interaction, data) \
685 PREFIX_FORCE_ON_SPH_ELEMENT_INTERACTIONS(post, 4, model, sph_model, sph_interaction, data)
686
687#ifndef ROCKY_CUDA_API
688 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_4_END() }
689#else
690 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_ELEMENT_INTERACTIONS_4_END() \
691 } \
692 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_force_on_element_interactions_4)
693#endif
694
695// POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS ---------------------------------------------------------
696
697#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS( \
698 model, sph_model, sph_interaction, data) \
699 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(post, 0, model, sph_model, sph_interaction, data)
700
701#ifndef ROCKY_CUDA_API
702 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_END() }
703#else
704 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_END() \
705 } \
706 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_force_on_triangle_interactions_0)
707#endif
708
709#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_1( \
710 model, sph_model, sph_interaction, data) \
711 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(post, 1, model, sph_model, sph_interaction, data)
712
713#ifndef ROCKY_CUDA_API
714 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() }
715#else
716 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() \
717 } \
718 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_force_on_triangle_interactions_1)
719#endif
720
721#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_2( \
722 model, sph_model, sph_interaction, data) \
723 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(post, 2, model, sph_model, sph_interaction, data)
724
725#ifndef ROCKY_CUDA_API
726 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() }
727#else
728 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() \
729 } \
730 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_force_on_triangle_interactions_2)
731#endif
732
733#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_3( \
734 model, sph_model, sph_interaction, data) \
735 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(post, 3, model, sph_model, sph_interaction, data)
736
737#ifndef ROCKY_CUDA_API
738 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() }
739#else
740 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() \
741 } \
742 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_force_on_triangle_interactions_3)
743#endif
744
745#define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_4( \
746 model, sph_model, sph_interaction, data) \
747 PREFIX_FORCE_ON_SPH_TRIANGLE_INTERACTIONS(post, 4, model, sph_model, sph_interaction, data)
748
749#ifndef ROCKY_CUDA_API
750 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() }
751#else
752 #define ROCKY_PLUGIN_POST_FORCE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() \
753 } \
754 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_force_on_triangle_interactions_4)
755#endif
756
757// MOVE_SPH ========================================================================================
758
759#define PREFIX_MOVE_ON_SPH_ELEMENTS(prefix, index, model, sph_model, sph_element, data) \
760 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void prefix##_move_elements_##index( \
761 IRockyDeviceModel& model, \
762 IRockySPHDeviceModel& sph_model, \
763 IRockySPHElement& sph_element, \
764 void* data) \
765 {
766#define PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS( \
767 prefix, index, model, sph_model, sph_interaction, data) \
768 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void prefix##_move_on_element_interactions_##index( \
769 IRockyDeviceModel& model, \
770 IRockySPHDeviceModel& sph_model, \
771 IRockySPHElementInteraction& sph_interaction, \
772 void* data) \
773 {
774#define PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS( \
775 prefix, index, model, sph_model, sph_interaction, data) \
776 extern "C" ROCKYAPI_EXPORT ROCKY_FUNCTIONS void \
777 prefix##_move_on_triangle_interactions_##index( \
778 IRockyDeviceModel& model, \
779 IRockySPHDeviceModel& sph_model, \
780 IRockySPHTriangleInteraction& sph_interaction, \
781 void* data) \
782 {
783// PRE_MOVE_ON_SPH_ELEMENTS -----------------------------------------------------------------------
784
785#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS(model, sph_model, sph_element, data) \
786 PREFIX_MOVE_ON_SPH_ELEMENTS(pre, 0, model, sph_model, sph_element, data)
787
788#ifndef ROCKY_CUDA_API
789 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_END() }
790#else
791 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_END() \
792 } \
793 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_move_elements_0)
794#endif
795
796#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_1(model, sph_model, sph_element, data) \
797 PREFIX_MOVE_ON_SPH_ELEMENTS(pre, 1, model, sph_model, sph_element, data)
798
799#ifndef ROCKY_CUDA_API
800 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_1_END() }
801#else
802 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_1_END() \
803 } \
804 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_move_elements_1)
805#endif
806
807#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_2(model, sph_model, sph_element, data) \
808 PREFIX_MOVE_ON_SPH_ELEMENTS(pre, 2, model, sph_model, sph_element, data)
809
810#ifndef ROCKY_CUDA_API
811 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_2_END() }
812#else
813 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_2_END() \
814 } \
815 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_move_elements_2)
816#endif
817
818#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_3(model, sph_model, sph_element, data) \
819 PREFIX_MOVE_ON_SPH_ELEMENTS(pre, 3, model, sph_model, sph_element, data)
820
821#ifndef ROCKY_CUDA_API
822 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_3_END() }
823#else
824 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_3_END() \
825 } \
826 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_move_elements_3)
827#endif
828
829#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_4(model, sph_model, sph_element, data) \
830 PREFIX_MOVE_ON_SPH_ELEMENTS(pre, 4, model, sph_model, sph_element, data)
831
832#ifndef ROCKY_CUDA_API
833 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_4_END() }
834#else
835 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENTS_4_END() \
836 } \
837 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(pre_move_elements_4)
838#endif
839
840// PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS -----------------------------------------------------------
841
842#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS(model, sph_model, sph_interaction, data) \
843 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(pre, 0, model, sph_model, sph_interaction, data)
844
845#ifndef ROCKY_CUDA_API
846 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_END() }
847#else
848 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_END() \
849 } \
850 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_move_on_element_interactions_0)
851#endif
852
853#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_1( \
854 model, sph_model, sph_interaction, data) \
855 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(pre, 1, model, sph_model, sph_interaction, data)
856
857#ifndef ROCKY_CUDA_API
858 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_1_END() }
859#else
860 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_1_END() \
861 } \
862 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_move_on_element_interactions_1)
863#endif
864
865#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_2( \
866 model, sph_model, sph_interaction, data) \
867 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(pre, 2, model, sph_model, sph_interaction, data)
868
869#ifndef ROCKY_CUDA_API
870 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_2_END() }
871#else
872 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_2_END() \
873 } \
874 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_move_on_element_interactions_2)
875#endif
876
877#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_3( \
878 model, sph_model, sph_interaction, data) \
879 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(pre, 3, model, sph_model, sph_interaction, data)
880
881#ifndef ROCKY_CUDA_API
882 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_3_END() }
883#else
884 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_3_END() \
885 } \
886 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_move_on_element_interactions_3)
887#endif
888
889#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_4( \
890 model, sph_model, sph_interaction, data) \
891 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(pre, 4, model, sph_model, sph_interaction, data)
892
893#ifndef ROCKY_CUDA_API
894 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_4_END() }
895#else
896 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_ELEMENT_INTERACTIONS_4_END() \
897 } \
898 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(pre_move_on_element_interactions_4)
899#endif
900
901// PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS -----------------------------------------------------------
902
903#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS( \
904 model, sph_model, sph_interaction, data) \
905 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 0, model, sph_model, sph_interaction, data)
906
907#ifndef ROCKY_CUDA_API
908 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_END() }
909#else
910 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_END() \
911 } \
912 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_move_on_triangle_interactions_0)
913#endif
914
915#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_1( \
916 model, sph_model, sph_interaction, data) \
917 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 1, model, sph_model, sph_interaction, data)
918
919#ifndef ROCKY_CUDA_API
920 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() }
921#else
922 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() \
923 } \
924 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_move_on_triangle_interactions_1)
925#endif
926
927#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_2( \
928 model, sph_model, sph_interaction, data) \
929 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 2, model, sph_model, sph_interaction, data)
930
931#ifndef ROCKY_CUDA_API
932 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() }
933#else
934 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() \
935 } \
936 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_move_on_triangle_interactions_2)
937#endif
938
939#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_3( \
940 model, sph_model, sph_interaction, data) \
941 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 3, model, sph_model, sph_interaction, data)
942
943#ifndef ROCKY_CUDA_API
944 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() }
945#else
946 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() \
947 } \
948 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_move_on_triangle_interactions_3)
949#endif
950
951#define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_4( \
952 model, sph_model, sph_interaction, data) \
953 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(pre, 4, model, sph_model, sph_interaction, data)
954
955#ifndef ROCKY_CUDA_API
956 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() }
957#else
958 #define ROCKY_PLUGIN_PRE_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() \
959 } \
960 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(pre_move_on_triangle_interactions_4)
961#endif
962
963// POST_MOVE_ON_SPH_ELEMENTS ----------------------------------------------------------------------
964
965#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS(model, sph_model, sph_element, data) \
966 PREFIX_MOVE_ON_SPH_ELEMENTS(post, 0, model, sph_model, sph_element, data)
967
968#ifndef ROCKY_CUDA_API
969 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_END() }
970#else
971 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_END() \
972 } \
973 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_move_elements_0)
974#endif
975
976#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_1(model, sph_model, sph_element, data) \
977 PREFIX_MOVE_ON_SPH_ELEMENTS(post, 1, model, sph_model, sph_element, data)
978
979#ifndef ROCKY_CUDA_API
980 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_1_END() }
981#else
982 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_1_END() \
983 } \
984 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_move_elements_1)
985#endif
986
987#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_2(model, sph_model, sph_element, data) \
988 PREFIX_MOVE_ON_SPH_ELEMENTS(post, 2, model, sph_model, sph_element, data)
989
990#ifndef ROCKY_CUDA_API
991 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_2_END() }
992#else
993 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_2_END() \
994 } \
995 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_move_elements_2)
996#endif
997
998#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_3(model, sph_model, sph_element, data) \
999 PREFIX_MOVE_ON_SPH_ELEMENTS(post, 3, model, sph_model, sph_element, data)
1000
1001#ifndef ROCKY_CUDA_API
1002 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_3_END() }
1003#else
1004 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_3_END() \
1005 } \
1006 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_move_elements_3)
1007#endif
1008
1009#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_4(model, sph_model, sph_element, data) \
1010 PREFIX_MOVE_ON_SPH_ELEMENTS(post, 4, model, sph_model, sph_element, data)
1011
1012#ifndef ROCKY_CUDA_API
1013 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_4_END() }
1014#else
1015 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENTS_4_END() \
1016 } \
1017 ROCKY_PLUGIN_SPH_ELEMENTS_CUDA_KERNEL(post_move_elements_4)
1018#endif
1019
1020// POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS ----------------------------------------------------------
1021
1022#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS( \
1023 model, sph_model, sph_interaction, data) \
1024 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(post, 0, model, sph_model, sph_interaction, data)
1025
1026#ifndef ROCKY_CUDA_API
1027 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_END() }
1028#else
1029 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_END() \
1030 } \
1031 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_move_on_element_interactions_0)
1032#endif
1033
1034#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_1( \
1035 model, sph_model, sph_interaction, data) \
1036 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(post, 1, model, sph_model, sph_interaction, data)
1037
1038#ifndef ROCKY_CUDA_API
1039 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_1_END() }
1040#else
1041 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_1_END() \
1042 } \
1043 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_move_on_element_interactions_1)
1044#endif
1045
1046#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_2( \
1047 model, sph_model, sph_interaction, data) \
1048 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(post, 2, model, sph_model, sph_interaction, data)
1049
1050#ifndef ROCKY_CUDA_API
1051 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_2_END() }
1052#else
1053 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_2_END() \
1054 } \
1055 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_move_on_element_interactions_2)
1056#endif
1057
1058#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_3( \
1059 model, sph_model, sph_interaction, data) \
1060 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(post, 3, model, sph_model, sph_interaction, data)
1061
1062#ifndef ROCKY_CUDA_API
1063 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_3_END() }
1064#else
1065 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_3_END() \
1066 } \
1067 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_move_on_element_interactions_3)
1068#endif
1069
1070#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_4( \
1071 model, sph_model, sph_interaction, data) \
1072 PREFIX_MOVE_ON_SPH_ELEMENT_INTERACTIONS(post, 4, model, sph_model, sph_interaction, data)
1073
1074#ifndef ROCKY_CUDA_API
1075 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_4_END() }
1076#else
1077 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_ELEMENT_INTERACTIONS_4_END() \
1078 } \
1079 ROCKY_PLUGIN_SPH_ELEMENT_INTERACTIONS_CUDA_KERNEL(post_move_on_element_interactions_4)
1080#endif
1081
1082// POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS ----------------------------------------------------------
1083
1084#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS( \
1085 model, sph_model, sph_interaction, data) \
1086 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(post, 0, model, sph_model, sph_interaction, data)
1087
1088#ifndef ROCKY_CUDA_API
1089 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_END() }
1090#else
1091 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_END() \
1092 } \
1093 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_move_on_triangle_interactions_0)
1094#endif
1095
1096#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_1( \
1097 model, sph_model, sph_interaction, data) \
1098 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(post, 1, model, sph_model, sph_interaction, data)
1099
1100#ifndef ROCKY_CUDA_API
1101 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() }
1102#else
1103 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_1_END() \
1104 } \
1105 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_move_on_triangle_interactions_1)
1106#endif
1107
1108#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_2( \
1109 model, sph_model, sph_interaction, data) \
1110 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(post, 2, model, sph_model, sph_interaction, data)
1111
1112#ifndef ROCKY_CUDA_API
1113 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() }
1114#else
1115 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_2_END() \
1116 } \
1117 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_move_on_triangle_interactions_2)
1118#endif
1119
1120#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_3( \
1121 model, sph_model, sph_interaction, data) \
1122 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(post, 3, model, sph_model, sph_interaction, data)
1123
1124#ifndef ROCKY_CUDA_API
1125 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() }
1126#else
1127 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_3_END() \
1128 } \
1129 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_move_on_triangle_interactions_3)
1130#endif
1131
1132#define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_4( \
1133 model, sph_model, sph_interaction, data) \
1134 PREFIX_MOVE_ON_SPH_TRIANGLE_INTERACTIONS(post, 4, model, sph_model, sph_interaction, data)
1135
1136#ifndef ROCKY_CUDA_API
1137 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() }
1138#else
1139 #define ROCKY_PLUGIN_POST_MOVE_ON_SPH_TRIANGLE_INTERACTIONS_4_END() \
1140 } \
1141 ROCKY_PLUGIN_SPH_TRIANGLE_INTERACTIONS_CUDA_KERNEL(post_move_on_triangle_interactions_4)
1142#endif
1143
1144// SPH elements initialization --------------------------------------------------------------------
1145
1146#define ROCKY_PLUGIN_INITIALIZE_SPH_ELEMENT(model, sph_model, sph_element, data) \
1147 extern "C" ROCKYAPI_EXPORT void initialize_sph_element( \
1148 IRockyModel& model, \
1149 IRockySPHModel& sph_model, \
1150 IRockySPHElementHost& sph_element, \
1151 void* data)
Definition rocky_model_api.hpp:19
Definition rocky_api.h:60
Definition rocky_sph_model_api.hpp:146
Definition rocky_sph_element_api.hpp:253
Definition rocky_sph_interaction_api.hpp:18
Definition rocky_sph_element_api.hpp:106
Definition rocky_sph_model_api.hpp:21
Definition rocky_sph_interaction_api.hpp:137

Connect with Ansys