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 IRockyModelDefinition rocky_api.h:60 IRockyModel::get_current_timedouble get_current_time() constDefinition rocky_api.cpp:129