56 const Teuchos::ParameterList& p)
58 std::string sum_name = p.get<std::string>(
"Sum Name");
59 Teuchos::RCP<std::vector<std::string> > value_names =
60 p.get<Teuchos::RCP<std::vector<std::string> > >(
"Values Names");
61 Teuchos::RCP<PHX::DataLayout> data_layout =
62 p.get< Teuchos::RCP<PHX::DataLayout> >(
"Data Layout");
64 TEUCHOS_ASSERT(
static_cast<int>(value_names->size()) < MAX_VALUES);
67 auto local_scalars = PHX::View<double *>(
"scalars",value_names->size());
68 auto local_scalars_host = Kokkos::create_mirror_view(local_scalars);
69 if(p.isType<Teuchos::RCP<
const std::vector<double> > >(
"Scalars")) {
70 auto scalars_v = *p.get<Teuchos::RCP<const std::vector<double> > >(
"Scalars");
73 TEUCHOS_ASSERT(scalars_v.size()==value_names->size());
75 for (std::size_t i=0; i < value_names->size(); ++i)
76 local_scalars_host(i) = scalars_v[i];
79 for (std::size_t i=0; i < value_names->size(); ++i)
80 local_scalars_host(i) = 1.0;
82 Kokkos::deep_copy(local_scalars,local_scalars_host);
84 scalars = local_scalars;
86 sum = PHX::MDField<ScalarT>(sum_name, data_layout);
88 this->addEvaluatedField(sum);
90 for (std::size_t i=0; i < value_names->size(); ++i) {
91 values[i] = PHX::MDField<const ScalarT>( (*value_names)[i], data_layout);
92 this->addDependentField(values[i]);
102 std::string n =
"Sum Evaluator";
123 auto num_vals = scalars.extent(0);
128 for (std::size_t iv = 0; iv < num_vals; ++iv)
129 sum(i) += scalars(iv)*(values[iv](i));
133 const size_t dim_1 = sum.extent(1);
134 for (std::size_t j = 0; j < dim_1; ++j)
135 for (std::size_t iv = 0; iv < num_vals; ++iv)
136 sum(i,j) += scalars(iv)*(values[iv](i,j));
140 const size_t dim_1 = sum.extent(1),dim_2 = sum.extent(2);
141 for (std::size_t j = 0; j < dim_1; ++j)
142 for (std::size_t k = 0; k < dim_2; ++k)
143 for (std::size_t iv = 0; iv < num_vals; ++iv)
144 sum(i,j,k) += scalars(iv)*(values[iv](i,j,k));
148 const size_t dim_1 = sum.extent(1),dim_2 = sum.extent(2),dim_3 = sum.extent(3);
149 for (std::size_t j = 0; j < dim_1; ++j)
150 for (std::size_t k = 0; k < dim_2; ++k)
151 for (std::size_t l = 0; l < dim_3; ++l)
152 for (std::size_t iv = 0; iv < num_vals; ++iv)
153 sum(i,j,k,l) += scalars(iv)*(values[iv](i,j,k,l));
157 const size_t dim_1 = sum.extent(1),dim_2 = sum.extent(2),dim_3 = sum.extent(3),dim_4 = sum.extent(4);
158 for (std::size_t j = 0; j < dim_1; ++j)
159 for (std::size_t k = 0; k < dim_2; ++k)
160 for (std::size_t l = 0; l < dim_3; ++l)
161 for (std::size_t m = 0; m < dim_4; ++m)
162 for (std::size_t iv = 0; iv < num_vals; ++iv)
163 sum(i,j,k,l,m) += scalars(iv)*(values[iv](i,j,k,l,m));
167 const size_t dim_1 = sum.extent(1),dim_2 = sum.extent(2),dim_3 = sum.extent(3),dim_4 = sum.extent(4),dim_5 = sum.extent(5);
168 for (std::size_t j = 0; j < dim_1; ++j)
169 for (std::size_t k = 0; k < dim_2; ++k)
170 for (std::size_t l = 0; l < dim_3; ++l)
171 for (std::size_t m = 0; m < dim_4; ++m)
172 for (std::size_t n = 0; n < dim_5; ++n)
173 for (std::size_t iv = 0; iv < num_vals; ++iv)
174 sum(i,j,k,l,m,n) += scalars(iv)*(values[iv](i,j,k,l,m,n));
225SumStatic(
const Teuchos::ParameterList& p)
227 std::string sum_name = p.get<std::string>(
"Sum Name");
228 Teuchos::RCP<std::vector<std::string> > value_names =
229 p.get<Teuchos::RCP<std::vector<std::string> > >(
"Values Names");
230 Teuchos::RCP<PHX::DataLayout> data_layout =
231 p.get< Teuchos::RCP<PHX::DataLayout> >(
"Data Layout");
234 TEUCHOS_ASSERT(data_layout->rank()==1);
236 sum = PHX::MDField<ScalarT,Tag0>(sum_name, data_layout);
238 this->addEvaluatedField(sum);
240 values.resize(value_names->size());
241 for (std::size_t i=0; i < value_names->size(); ++i) {
242 values[i] = PHX::MDField<const ScalarT,Tag0>( (*value_names)[i], data_layout);
243 this->addDependentField(values[i]);
246 std::string n =
"SumStatic Rank 1 Evaluator";
267SumStatic(
const Teuchos::ParameterList& p)
269 std::string sum_name = p.get<std::string>(
"Sum Name");
270 Teuchos::RCP<std::vector<std::string> > value_names =
271 p.get<Teuchos::RCP<std::vector<std::string> > >(
"Values Names");
272 Teuchos::RCP<PHX::DataLayout> data_layout =
273 p.get< Teuchos::RCP<PHX::DataLayout> >(
"Data Layout");
276 if(p.isType<Teuchos::RCP<
const std::vector<double> > >(
"Scalars")) {
277 Teuchos::RCP<const std::vector<double> > scalar_values
278 = p.get<Teuchos::RCP<const std::vector<double> > >(
"Scalars");
281 TEUCHOS_ASSERT(scalar_values->size()==value_names->size());
284 PHX::View<double*> scalars_nc = PHX::View<double*>(
"scalars",scalar_values->size());
286 for(std::size_t i=0;i<scalar_values->size();i++)
287 scalars_nc(i) = (*scalar_values)[i];
289 scalars = scalars_nc;
296 TEUCHOS_ASSERT(data_layout->rank()==2);
298 sum = PHX::MDField<ScalarT,Tag0,Tag1>(sum_name, data_layout);
300 this->addEvaluatedField(sum);
302 values.resize(value_names->size());
303 for (std::size_t i=0; i < value_names->size(); ++i) {
304 values[i] = PHX::MDField<const ScalarT,Tag0,Tag1>( (*value_names)[i], data_layout);
305 this->addDependentField(values[i]);
307 numValues = value_names->size();
308 TEUCHOS_ASSERT(numValues<=MAX_VALUES);
310 std::string n =
"SumStatic Rank 2 Evaluator";
318SumStatic(
const std::vector<PHX::Tag<typename EvalT::ScalarT>> & inputs,
319 const std::vector<double> & scalar_values,
320 const PHX::Tag<typename EvalT::ScalarT> & output)
322 TEUCHOS_ASSERT(scalar_values.size()==inputs.size());
325 if(scalars.size()==0) {
331 PHX::View<double*> scalars_nc = PHX::View<double*>(
"scalars",scalar_values.size());
333 for(std::size_t i=0;i<scalar_values.size();i++)
334 scalars_nc(i) = scalar_values[i];
336 scalars = scalars_nc;
340 TEUCHOS_ASSERT(inputs.size()<=MAX_VALUES);
343 this->addEvaluatedField(sum);
345 values.resize(inputs.size());
346 for (std::size_t i=0; i < inputs.size(); ++i) {
347 values[i] = inputs[i];
348 this->addDependentField(values[i]);
351 numValues = inputs.size();
353 std::string n =
"SumStatic Rank 2 Evaluator";