Skip to main content

Rocky Solver SDK 2024 R2

api_omp_joints

Last update: 17.07.2025
1#pragma once
2
3#include <rocky20/api/device/api_device_joints.hpp>
4#include <rocky20/device/omp_backend.hpp>
5
6namespace rocky::omp
7{
8
9// Joints ------------------------------------------------------------------------------------------
10void dispatch_joints_kernel(
11 IRockyModel &model,
12 joints_f_type h_joint_forces_f_ptr,
13 void *udf_data
14)
15{
16 SDeviceModel *device_data = model.get_device_data(0);
17
18 #pragma omp parallel num_threads(model.get_number_of_processes())
19 {
20 device::execute_joints_function<OMPBackend>(
21 device_data,
22 0,
23 model.get_current_time(),
24 Function2Functor<joints_f_type> { h_joint_forces_f_ptr },
25 udf_data);
26 }
27}
28
29void dispatch_joint_forces_kernel(
30 IRockyModel &model,
31 joint_forces_f_type h_joint_forces_f_ptr,
32 void *udf_data
33)
34{
35 SDeviceModel *device_data = model.get_device_data(0);
36
37 #pragma omp parallel num_threads(model.get_number_of_processes())
38 {
39 device::compute_joint_forces<OMPBackend>(
40 device_data,
41 0,
42 Function2Functor<joint_forces_f_type> { h_joint_forces_f_ptr },
43 udf_data);
44 }
45}
46
47void dispatch_joint_breakage_kernel(
48 IRockyModel& model,
49 joint_breakage_f_type h_joint_breakage_f_ptr,
50 void* udf_data
51)
52{
53 SDeviceModel* device_data = model.get_device_data(0);
54
55 OMPBackend::atomic_int nbreak_joints_a(0);
56 #pragma omp parallel num_threads(model.get_number_of_processes())
57 {
58 device::compute_joint_breakage<OMPBackend>(
59 device_data,
60 0,
61 Function2Functor<joint_breakage_f_type> { h_joint_breakage_f_ptr },
62 udf_data,
63 &nbreak_joints_a,
64 model._impl->iteration.current_time);
65 }
66 model._impl->gen.nbreak_joints = nbreak_joints_a;
67}
68
69
70} // namespace rocky::omp
Definition rocky_api.h:60
double get_current_time() const
Definition rocky_api.cpp:129

Connect with Ansys