Panzer Version of the Day
Loading...
Searching...
No Matches
Panzer_ResponseScatterEvaluator_IPCoordinates_impl.hpp
Go to the documentation of this file.
1// @HEADER
2// *****************************************************************************
3// Panzer: A partial differential equation assembly
4// engine for strongly coupled complex multiphysics systems
5//
6// Copyright 2011 NTESS and the Panzer contributors.
7// SPDX-License-Identifier: BSD-3-Clause
8// *****************************************************************************
9// @HEADER
10
11#ifndef PANZER_RESPONSE_SCATTER_EVALUATOR_IPCoordinates_IMPL_HPP
12#define PANZER_RESPONSE_SCATTER_EVALUATOR_IPCoordinates_IMPL_HPP
13
14#include <iostream>
15#include <string>
16
17#include "PanzerDiscFE_config.hpp"
18
19#include "Phalanx_Evaluator_Macros.hpp"
20#include "Phalanx_MDField.hpp"
21#include "Phalanx_DataLayout_MDALayout.hpp"
22
24#include "Panzer_Dimension.hpp"
27
28namespace panzer {
29
33template<typename EvalT, typename Traits>
35ResponseScatterEvaluator_IPCoordinates(const std::string & name,
36 int ir_order)
37 : responseName_(name), ir_order_(ir_order)
38{
39 using Teuchos::RCP;
40 using Teuchos::rcp;
41
42 std::string dummyName = ResponseBase::buildLookupName(name) + " dummy target";
43
44 // build dummy target tag
45 RCP<PHX::DataLayout> dl_dummy = rcp(new PHX::MDALayout<panzer::Dummy>(0));
46 scatterHolder_ = rcp(new PHX::Tag<ScalarT>(dummyName,dl_dummy));
47 this->addEvaluatedField(*scatterHolder_);
48
49 std::string n = "IPCoordinates Response Scatter: " + name;
50 this->setName(n);
51}
52
53template<typename EvalT, typename Traits>
56{
57 // extract response object
58 responseObj_ = Teuchos::rcp_dynamic_cast<Response_IPCoordinates<EvalT> >(
59 d.gedc->getDataObject(ResponseBase::buildLookupName(responseName_)),true);
60}
61
62
63template<typename EvalT, typename Traits>
70
71template<typename EvalT, typename Traits>
73evaluateFields(typename Traits::EvalData workset)
74{
75 // Kokkos::DynRankView<double,PHX::Device>& workset_coords = (this->wda(workset).int_rules[ir_index_])->ip_coordinates;
76 IntegrationValues2<double> & iv = *this->wda(workset).int_rules[ir_index_];
77
78 if (tmpCoords_.size() != Teuchos::as<std::size_t>(iv.ip_coordinates.extent(2))) {
79 tmpCoords_.resize(iv.ip_coordinates.extent(2));
80 for(std::size_t dim=0;dim<tmpCoords_.size();dim++)
81 tmpCoords_[dim].clear();
82 }
83
84 auto ip_coordinates_h = Kokkos::create_mirror_view(PHX::as_view(iv.ip_coordinates));
85 Kokkos::deep_copy(ip_coordinates_h, PHX::as_view(iv.ip_coordinates));
86
87 // This ordering is for the DataTransferKit. It blocks all x
88 // coordinates for a set of points, then all y coordinates and if
89 // required all z coordinates.
90 for (int dim = 0; dim < iv.ip_coordinates.extent_int(2); ++dim)
91 for (index_t cell = 0; cell < workset.num_cells; ++cell)
92 for (int ip = 0; ip < iv.ip_coordinates.extent_int(1); ++ip)
93 tmpCoords_[dim].push_back(ip_coordinates_h(static_cast<int>(cell),ip,dim));
94}
95
96//**********************************************************************
97template<typename EvalT, typename Traits>
99postEvaluate(typename Traits::PostEvalData /* data */)
100{
101 std::vector<panzer::Traits::Residual::ScalarT> & coords = *responseObj_->getNonconstCoords();
102 coords.clear();
103
104 for (std::size_t dim = 0; dim < tmpCoords_.size(); ++dim) {
105 for (typename std::vector<ScalarT>::const_iterator x=tmpCoords_[dim].begin(); x != tmpCoords_[dim].end(); ++ x)
106 coords.push_back(Sacado::scalarValue(*x));
107 }
108
109 tmpCoords_.clear();
110}
111
112}
113
114#endif
static std::string buildLookupName(const std::string &responseName)
void postRegistrationSetup(typename Traits::SetupData d, PHX::FieldManager< Traits > &fm)
ResponseScatterEvaluator_IPCoordinates(const std::string &name, int ir_order)
A constructor with concrete arguments instead of a parameter list.
int num_cells
DEPRECATED - use: numCells()
std::vector< int >::size_type getIntegrationRuleIndex(int ir_degree, const panzer::Workset &workset, WorksetDetailsAccessor &wda)
Teuchos::RCP< GlobalEvaluationDataContainer > gedc
Teuchos::RCP< const std::vector< panzer::Workset > > worksets_