KOKKOS_INLINE_FUNCTION void FEInterpolation<EvalT, Traits>::operator () (const int i) const { for (PHX::index_size_type qp = 0; qp < num_qp; ++qp) { val_qp(i,qp) = 0.0; for (PHX::index_size_type dim = 0; dim < num_dim; ++dim) val_grad_qp(i,qp,dim) = 0.0; // Sum nodal contributions to qp for (PHX::index_size_type node = 0; node < num_nodes; ++node) { val_qp(i,qp) += phi(qp, node) * val_node(i,node); for (PHX::index_size_type dim = 0; dim < num_dim; ++dim) val_grad_qp(i,qp,dim) += grad_phi(qp, node, dim) * val_node(i,node); } } }
//********************************************************************** PHX_EVALUATE_FIELDS(FEInterpolation,cell_data) { std::vector<Element_Linear2D>::iterator cell_it = cell_data.begin; // Loop over number of cells for (std::size_t cell = 0; cell < cell_data.num_cells; ++cell) { const shards::Array<double,shards::NaturalOrder,QuadPoint,Node>& phi = cell_it->basisFunctions(); const shards::Array<double,shards::NaturalOrder,QuadPoint,Node,Dim>& grad_phi = cell_it->basisFunctionGradientsRealSpace(); // Loop over quad points of cell for (int qp = 0; qp < num_qp; ++qp) { val_qp(cell,qp) = 0.0; for (int dim = 0; dim < num_dim; ++dim) val_grad_qp(cell,qp,dim) = 0.0; // Sum nodal contributions to qp for (int node = 0; node < num_nodes; ++node) { val_qp(cell,qp) += phi(qp,node) * val_node(cell,node); for (int dim = 0; dim < num_dim; ++dim) val_grad_qp(cell,qp,dim) += grad_phi(qp,node,dim) * val_node(cell,node); } } ++cell_it; } // std::cout << "FEINterpolation: val_node" << std::endl; // val_node.print(std::cout,true); // std::cout << "FEINterpolation: val_qp" << std::endl; // val_qp.print(std::cout,true); // std::cout << "FEINterpolation: val_grad_qp" << std::endl; // val_grad_qp.print(std::cout,true); }