1 #ifndef teca_numerics_h
2 #define teca_numerics_h
32 const std::string &v1,
const std::string &avg)
33 : m_v0(v0), m_v1(v1), m_avg(avg) {}
39 const_p_teca_dataset operator()(
unsigned int,
40 const std::vector<const_p_teca_dataset> &in_data,
const teca_metadata &)
42 const_p_teca_mesh in_mesh;
45 if (!(in_mesh = std::dynamic_pointer_cast<const teca_mesh>(in_data[0])) ||
46 !(v0 = in_mesh->get_point_arrays()->get(m_v0)) ||
47 !(v1 = in_mesh->get_point_arrays()->get(m_v1)))
50 <<
", " << m_v0 <<
"=" << v0 <<
", " << m_v1 <<
"=" << v1)
54 unsigned long n_pts = v0->size();
62 auto [sp_v0, p_v0, sp_v1, p_v1] = get_host_accessible<CTT>(v0, v1);
63 auto [p_avg] = data<TT>(avg);
67 for (
unsigned long i = 0; i < n_pts; ++i)
68 p_avg[i] = (p_v0[i] + p_v1[i])/NT(2);
71 p_teca_mesh out_mesh = std::static_pointer_cast<teca_mesh>(
72 in_mesh->new_instance());
74 out_mesh->shallow_copy(std::const_pointer_cast<teca_mesh>(in_mesh));
75 out_mesh->get_point_arrays()->append(m_avg, avg);
96 const std::string &v1,
const std::string &diff)
97 : m_v0(v0), m_v1(v1), m_diff(diff) {}
104 const_p_teca_dataset operator()(
unsigned int,
105 const std::vector<const_p_teca_dataset> &in_data,
const teca_metadata &)
107 const_p_teca_mesh in_mesh;
110 if (!(in_mesh = std::dynamic_pointer_cast<const teca_mesh>(in_data[0])) ||
111 !(v0 = in_mesh->get_point_arrays()->get(m_v0)) ||
112 !(v1 = in_mesh->get_point_arrays()->get(m_v1)))
115 <<
", " << m_v0 <<
"=" << v0 <<
", " << m_v1 <<
"=" << v1)
119 unsigned long n_pts = v0->size();
125 assert_type<CTT>(v1);
127 auto [sp_v0, p_v0, sp_v1, p_v1] = get_host_accessible<CTT>(v0, v1);
128 auto [p_diff] = data<TT>(diff);
132 for (
unsigned long i = 0; i < n_pts; ++i)
133 p_diff[i] = p_v1[i] - p_v0[i];
136 p_teca_mesh out_mesh = std::static_pointer_cast<teca_mesh>(
137 in_mesh->new_instance());
139 out_mesh->shallow_copy(std::const_pointer_cast<teca_mesh>(in_mesh));
140 out_mesh->get_point_arrays()->append(m_diff, diff);
Numeric code that could be reused by teca_derived_quantity.
Definition: teca_derived_quantity_numerics.h:19
p_teca_error_handler error_handler TECA_EXPORT
The global error handler instance.
some functions helping us manipulate teca_variant_array
Definition: teca_variant_array_util.h:14
void sync_host_access_any(const array_t &... arrays)
Definition: teca_variant_array_util.h:29
Definition: teca_derived_quantity_numerics.h:28
Definition: teca_derived_quantity_numerics.h:92
#define TECA_ERROR(_msg)
Constructs an error message and sends it to the stderr stream.
Definition: teca_common.h:161
std::shared_ptr< teca_variant_array > p_teca_variant_array
Definition: teca_variant_array.h:27
std::shared_ptr< const teca_variant_array > const_p_teca_variant_array
Definition: teca_variant_array.h:27
#define VARIANT_ARRAY_DISPATCH(p,...)
Definition: teca_variant_array_impl.h:329