1 #ifndef teca_numerics_h
2 #define teca_numerics_h
25 const std::string &v1,
const std::string &avg)
26 : m_v0(v0), m_v1(v1), m_avg(avg) {}
32 const_p_teca_dataset operator()(
unsigned int,
33 const std::vector<const_p_teca_dataset> &in_data,
const teca_metadata &)
35 const_p_teca_mesh in_mesh;
38 if (!(in_mesh = std::dynamic_pointer_cast<const teca_mesh>(in_data[0])) ||
39 !(v0 = in_mesh->get_point_arrays()->get(m_v0)) ||
40 !(v1 = in_mesh->get_point_arrays()->get(m_v1)))
43 <<
", " << m_v0 <<
"=" << v0 <<
", " << m_v1 <<
"=" << v1)
47 unsigned long n_pts = v0->size();
53 const NT *p_v0 =
static_cast<const TT*
>(v0.get())->get();
54 const NT *p_v1 =
dynamic_cast<const TT*
>(v1.get())->get();
55 NT *p_avg =
static_cast<TT*
>(avg.get())->get();
56 for (
unsigned long i = 0; i < n_pts; ++i)
57 p_avg[i] = (p_v0[i] + p_v1[i])/NT(2);
60 p_teca_mesh out_mesh = std::static_pointer_cast<teca_mesh>(
61 in_mesh->new_instance());
63 out_mesh->shallow_copy(std::const_pointer_cast<teca_mesh>(in_mesh));
64 out_mesh->get_point_arrays()->append(m_avg, avg);
85 const std::string &v1,
const std::string &diff)
86 : m_v0(v0), m_v1(v1), m_diff(diff) {}
93 const_p_teca_dataset operator()(
unsigned int,
94 const std::vector<const_p_teca_dataset> &in_data,
const teca_metadata &)
96 const_p_teca_mesh in_mesh;
99 if (!(in_mesh = std::dynamic_pointer_cast<const teca_mesh>(in_data[0])) ||
100 !(v0 = in_mesh->get_point_arrays()->get(m_v0)) ||
101 !(v1 = in_mesh->get_point_arrays()->get(m_v1)))
104 <<
", " << m_v0 <<
"=" << v0 <<
", " << m_v1 <<
"=" << v1)
108 unsigned long n_pts = v0->size();
114 const NT *p_v0 =
static_cast<const TT*
>(v0.get())->get();
115 const NT *p_v1 =
dynamic_cast<const TT*
>(v1.get())->get();
116 NT *p_diff =
static_cast<TT*
>(diff.get())->get();
117 for (
unsigned long i = 0; i < n_pts; ++i)
118 p_diff[i] = p_v1[i] - p_v0[i];
121 p_teca_mesh out_mesh = std::static_pointer_cast<teca_mesh>(
122 in_mesh->new_instance());
124 out_mesh->shallow_copy(std::const_pointer_cast<teca_mesh>(in_mesh));
125 out_mesh->get_point_arrays()->append(m_diff, diff);