Modified Math.h.in instead of Math.h
Changed return types for all scalar and vector unary math operations to return vtkm::FloatDefault instead of input type. vtkm::Float64 will be returned when the input is vtkm::Float64.
This commit is contained in:
parent
5777c4caa5
commit
cd95cbe90b
1804
vtkm/Math.h
1804
vtkm/Math.h
File diff suppressed because it is too large
Load Diff
@ -61,8 +61,10 @@ $# Ignore the following comment. It is meant for the generated file.
|
||||
#define VTKM_CUDA_MATH_FUNCTION_64(func) func
|
||||
|
||||
$py(
|
||||
def unary_function(name, type, returntype, cuda_expression, std_expression):
|
||||
return '''static inline VTKM_EXEC_CONT
|
||||
def unary_function(name, type, returntype = None, cuda_expression = None, std_expression = None):
|
||||
if returntype is not None:
|
||||
|
||||
return '''static inline VTKM_EXEC_CONT
|
||||
{2} {0}({1} x) {{
|
||||
#ifdef VTKM_CUDA
|
||||
return {3};
|
||||
@ -72,11 +74,28 @@ def unary_function(name, type, returntype, cuda_expression, std_expression):
|
||||
}}
|
||||
'''.format(name, type, returntype, cuda_expression, std_expression)
|
||||
|
||||
else:
|
||||
|
||||
return '''template <typename T>
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::FloatDefault {0}(T x) {{
|
||||
#ifdef VTKM_CUDA
|
||||
if(std::is_same< vtkm::FloatDefault, vtkm::Float64 >::value)
|
||||
return VTKM_CUDA_MATH_FUNCTION_64({1})(static_cast<vtkm::FloatDefault>(x));
|
||||
else
|
||||
return VTKM_CUDA_MATH_FUNCTION_32({1})(static_cast<vtkm::FloatDefault>(x));
|
||||
#else
|
||||
return std::{1}(static_cast<vtkm::FloatDefault>(x));
|
||||
#endif
|
||||
}}
|
||||
'''.format(name, type)
|
||||
|
||||
|
||||
def unary_Vec_function(vtkmname):
|
||||
return '''template<typename T, vtkm::IdComponent N>
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<T,N> {0}(const vtkm::Vec<T,N> &x) {{
|
||||
vtkm::Vec<T,N> result;
|
||||
vtkm::Vec<vtkm::FloatDefault,N> {0}(const vtkm::Vec<T,N> &x) {{
|
||||
vtkm::Vec<vtkm::FloatDefault,N> result;
|
||||
for (vtkm::IdComponent index = 0; index < N; index++)
|
||||
{{
|
||||
result[index] = vtkm::{0}(x[index]);
|
||||
@ -85,29 +104,61 @@ vtkm::Vec<T,N> {0}(const vtkm::Vec<T,N> &x) {{
|
||||
}}
|
||||
template<typename T>
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<T,4> {0}(const vtkm::Vec<T,4> &x) {{
|
||||
return vtkm::Vec<T,4>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]),
|
||||
vtkm::{0}(x[2]),
|
||||
vtkm::{0}(x[3]));
|
||||
vtkm::Vec<vtkm::FloatDefault,4> {0}(const vtkm::Vec<T,4> &x) {{
|
||||
return vtkm::Vec<vtkm::FloatDefault,4>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]),
|
||||
vtkm::{0}(x[2]),
|
||||
vtkm::{0}(x[3]));
|
||||
}}
|
||||
template<typename T>
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<T,3> {0}(const vtkm::Vec<T,3> &x) {{
|
||||
return vtkm::Vec<T,3>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]),
|
||||
vtkm::{0}(x[2]));
|
||||
vtkm::Vec<vtkm::FloatDefault,3> {0}(const vtkm::Vec<T,3> &x) {{
|
||||
return vtkm::Vec<vtkm::FloatDefault,3>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]),
|
||||
vtkm::{0}(x[2]));
|
||||
}}
|
||||
template<typename T>
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<T,2> {0}(const vtkm::Vec<T,2> &x) {{
|
||||
return vtkm::Vec<T,2>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]));
|
||||
vtkm::Vec<vtkm::FloatDefault,2> {0}(const vtkm::Vec<T,2> &x) {{
|
||||
return vtkm::Vec<vtkm::FloatDefault,2>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]));
|
||||
}}
|
||||
'''.format(vtkmname) + \
|
||||
'''template<vtkm::IdComponent N>
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<vtkm::Float64,N> {0}(const vtkm::Vec<vtkm::Float64,N> &x) {{
|
||||
vtkm::Vec<vtkm::Float64,N> result;
|
||||
for (vtkm::IdComponent index = 0; index < N; index++)
|
||||
{{
|
||||
result[index] = vtkm::{0}(x[index]);
|
||||
}}
|
||||
return result;
|
||||
}}
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<vtkm::Float64,4> {0}(const vtkm::Vec<vtkm::Float64,4> &x) {{
|
||||
return vtkm::Vec<vtkm::Float64,4>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]),
|
||||
vtkm::{0}(x[2]),
|
||||
vtkm::{0}(x[3]));
|
||||
}}
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<vtkm::Float64,3> {0}(const vtkm::Vec<vtkm::Float64,3> &x) {{
|
||||
return vtkm::Vec<vtkm::Float64,3>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]),
|
||||
vtkm::{0}(x[2]));
|
||||
}}
|
||||
static inline VTKM_EXEC_CONT
|
||||
vtkm::Vec<vtkm::Float64,2> {0}(const vtkm::Vec<vtkm::Float64,2> &x) {{
|
||||
return vtkm::Vec<vtkm::Float64,2>(vtkm::{0}(x[0]),
|
||||
vtkm::{0}(x[1]));
|
||||
}}
|
||||
'''.format(vtkmname)
|
||||
|
||||
|
||||
|
||||
def unary_math_function_no_vec(vtkmname, sysname, returntype = None):
|
||||
return unary_function(vtkmname,
|
||||
return unary_function(vtkmname, sysname) + \
|
||||
unary_function(vtkmname,
|
||||
'vtkm::Float32',
|
||||
'vtkm::Float32' if returntype == None else returntype,
|
||||
'VTKM_CUDA_MATH_FUNCTION_32(' + sysname + ')(x)',
|
||||
|
Loading…
Reference in New Issue
Block a user