CudaExternalForceField.inl
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef SOFA_GPU_CUDA_CUDAEXTERNALFORCEFIELD_INL
00026 #define SOFA_GPU_CUDA_CUDAEXTERNALFORCEFIELD_INL
00027
00028 #include "CudaExternalForceField.h"
00029 #include <sofa/component/interactionforcefield/ExternalForceField.inl>
00030
00031 namespace sofa
00032 {
00033
00034 namespace gpu
00035 {
00036
00037 namespace cuda
00038 {
00039
00040 extern "C"
00041 {
00042 void ExternalForceFieldCuda3f_addForce(unsigned int size,void* f, const void* indices,const void *forces );
00043
00044 };
00045
00046 }
00047
00048 }
00049
00050
00051
00052 namespace component
00053 {
00054
00055 namespace interactionforcefield
00056 {
00057
00058 using namespace gpu::cuda;
00059
00060 template<>
00061 void ExternalForceField<sofa::gpu::cuda::CudaVec3fTypes>::addForce (VecDeriv& f, const VecCoord&, const VecDeriv& )
00062 {
00063 gpu::cuda::CudaVector<unsigned> indices;
00064 unsigned n=m_indices.getValue().size();
00065 indices.resize(n);
00066 for(unsigned i=0;i<m_indices.getValue().size();i++)
00067 indices[i]=m_indices.getValue()[i];
00068 sofa::gpu::cuda::ExternalForceFieldCuda3f_addForce(m_indices.getValue().size(), f.deviceWrite(),indices.deviceRead(),m_forces.getValue().deviceRead());
00069 }
00070
00071
00072 }
00073
00074 }
00075
00076 }
00077
00078 #endif