Panzer
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
disc-fe
src
evaluators
Panzer_GatherBasisCoordinates_impl.hpp
Go to the documentation of this file.
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Panzer: A partial differential equation assembly
5
// engine for strongly coupled complex multiphysics systems
6
// Copyright (2011) Sandia Corporation
7
//
8
// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9
// the U.S. Government retains certain rights in this software.
10
//
11
// Redistribution and use in source and binary forms, with or without
12
// modification, are permitted provided that the following conditions are
13
// met:
14
//
15
// 1. Redistributions of source code must retain the above copyright
16
// notice, this list of conditions and the following disclaimer.
17
//
18
// 2. Redistributions in binary form must reproduce the above copyright
19
// notice, this list of conditions and the following disclaimer in the
20
// documentation and/or other materials provided with the distribution.
21
//
22
// 3. Neither the name of the Corporation nor the names of the
23
// contributors may be used to endorse or promote products derived from
24
// this software without specific prior written permission.
25
//
26
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37
//
38
// Questions? Contact Roger P. Pawlowski (rppawlo@sandia.gov) and
39
// Eric C. Cyr (eccyr@sandia.gov)
40
// ***********************************************************************
41
// @HEADER
42
43
#ifndef PANZER_GATHER_BASIS_COORDINATES_IMPL_HPP
44
#define PANZER_GATHER_BASIS_COORDINATES_IMPL_HPP
45
46
#include "Teuchos_Assert.hpp"
47
#include "Phalanx_DataLayout.hpp"
48
49
#include "
Panzer_GlobalIndexer.hpp
"
50
#include "
Panzer_PureBasis.hpp
"
51
#include "
Panzer_Workset_Utilities.hpp
"
52
53
#include "Teuchos_FancyOStream.hpp"
54
55
template
<
typename
EvalT,
typename
TRAITS>
56
std::string
57
panzer::GatherBasisCoordinates<EvalT, TRAITS>::
58
fieldName
(
const
std::string & basisName)
59
{
60
std::stringstream ss;
61
ss <<
"Basis_"
<< basisName <<
" BasisCoordinates"
;
62
return
ss.str();
63
}
64
65
template
<
typename
EvalT,
typename
TRAITS>
66
panzer::GatherBasisCoordinates<EvalT, TRAITS>::
67
GatherBasisCoordinates
(
const
panzer::PureBasis
& basis)
68
{
69
basisName_
= basis.
name
();
70
71
basisCoordinates_
= PHX::MDField<ScalarT,Cell,BASIS,Dim>(
fieldName
(
basisName_
),basis.
coordinates
);
72
73
this->addEvaluatedField(
basisCoordinates_
);
74
75
this->setName(
"Gather "
+
fieldName
(
basisName_
));
76
}
77
78
// **********************************************************************
79
template
<
typename
EvalT,
typename
TRAITS>
80
void
panzer::GatherBasisCoordinates<EvalT, TRAITS>::
81
postRegistrationSetup
(
typename
TRAITS::SetupData sd,
82
PHX::FieldManager<TRAITS>
&
/* fm */
)
83
{
84
basisIndex_
=
panzer::getPureBasisIndex
(
basisName_
, (*sd.worksets_)[0], this->wda);
85
}
86
87
// **********************************************************************
88
template
<
typename
EvalT,
typename
TRAITS>
89
void
panzer::GatherBasisCoordinates<EvalT, TRAITS>::
90
evaluateFields
(
typename
TRAITS::EvalData workset)
91
{
92
// const Kokkos::DynRankView<double,PHX::Device> & basisCoords = this->wda(workset).bases[basisIndex_]->basis_coordinates;
93
const
Teuchos::RCP<const BasisValues2<double> > bv = this->
wda
(workset).bases[
basisIndex_
];
94
95
// just copy the array
96
auto
d_basisCoordinates =
basisCoordinates_
.get_static_view();
97
auto
s_basis_coordinates = bv->basis_coordinates.get_static_view();
98
Kokkos::parallel_for(
"GatherBasisCoords"
,s_basis_coordinates.extent_int(0), KOKKOS_LAMBDA(
int
i) {
99
for
(
int
j=0;j<s_basis_coordinates.extent_int(1);j++)
100
for
(
int
k=0;k<s_basis_coordinates.extent_int(2);k++)
101
d_basisCoordinates(i,j,k)= s_basis_coordinates(i,j,k);
102
});
103
Kokkos::fence();
104
}
105
106
#endif
Panzer_GlobalIndexer.hpp
Panzer_PureBasis.hpp
Panzer_Workset_Utilities.hpp
PHX::FieldManager
Definition
Panzer_BCStrategy_Base.hpp:53
panzer::EvaluatorWithBaseImpl::wda
WorksetDetailsAccessor wda
Definition
Panzer_Evaluator_WithBaseImpl.hpp:63
panzer::GatherBasisCoordinates::basisName_
std::string basisName_
Definition
Panzer_GatherBasisCoordinates_decl.hpp:83
panzer::GatherBasisCoordinates::fieldName
static std::string fieldName(const std::string &basisName)
Definition
Panzer_GatherBasisCoordinates_impl.hpp:58
panzer::GatherBasisCoordinates::basisIndex_
std::vector< std::string >::size_type basisIndex_
Definition
Panzer_GatherBasisCoordinates_decl.hpp:84
panzer::GatherBasisCoordinates::GatherBasisCoordinates
GatherBasisCoordinates()
panzer::GatherBasisCoordinates::basisCoordinates_
PHX::MDField< ScalarT, Cell, BASIS, Dim > basisCoordinates_
Definition
Panzer_GatherBasisCoordinates_decl.hpp:85
panzer::GatherBasisCoordinates::evaluateFields
void evaluateFields(typename TRAITS::EvalData d)
Definition
Panzer_GatherBasisCoordinates_impl.hpp:90
panzer::GatherBasisCoordinates::postRegistrationSetup
void postRegistrationSetup(typename TRAITS::SetupData d, PHX::FieldManager< TRAITS > &vm)
Definition
Panzer_GatherBasisCoordinates_impl.hpp:81
panzer::PureBasis
Description and data layouts associated with a particular basis.
Definition
Panzer_PureBasis.hpp:61
panzer::PureBasis::name
std::string name() const
A unique key that is the combination of the basis type and basis order.
Definition
Panzer_PureBasis.cpp:204
panzer::PureBasis::coordinates
Teuchos::RCP< PHX::DataLayout > coordinates
<Cell,Basis,Dim>
Definition
Panzer_PureBasis.hpp:162
panzer::getPureBasisIndex
std::vector< std::string >::size_type getPureBasisIndex(std::string basis_name, const panzer::Workset &workset, WorksetDetailsAccessor &wda)
Returns the index in the workset bases for a particular PureBasis name.
Definition
Panzer_Workset_Utilities.cpp:57
Generated by
1.17.0