{                   \
        uint pDims = cudaGridSize((
uint)size, BLOCK_SIZE);              \
 
        if (type == ParticleApproximation<TDataType>::KT_Smooth)                                            \
        {                                                               \
                return SmoothKernel<Real>::integral(r, h, s);   \
            };                                                              \
            Func << <pDims, BLOCK_SIZE >> > (__VA_ARGS__, lambdaFunc, ParticleApproximation<TDataType>::mScalingFactor);    \
        }                                                               \
        else if (type == ParticleApproximation<TDataType>::KT_Spiky)                                        \
        {                                                               \
                return SpikyKernel<Real>::integral(r, h, s);                    \
            };                                                          \
            Func << <pDims, BLOCK_SIZE >> > (__VA_ARGS__, lambdaFunc, ParticleApproximation<TDataType>::mScalingFactor);    \
        }                                                               \
        cuSynchronize();                                                \
    }