43 #include "PanzerDiscFE_config.hpp" 47 #ifdef HAVE_PANZER_EXPLICIT_INSTANTIATION 53 Teuchos::RCP<std::vector<panzer::Workset> >
55 const std::vector<std::size_t>& local_cell_ids,
56 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates);
59 Teuchos::RCP<std::vector<panzer::Workset> >
61 const std::string & elementBlock,
62 const std::vector<std::size_t>& local_cell_ids,
63 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates);
66 Teuchos::RCP<std::map<unsigned,panzer::Workset> >
68 const std::vector<std::size_t>& local_cell_ids,
69 const std::vector<std::size_t>& local_side_ids,
70 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates);
73 Teuchos::RCP<std::map<unsigned,panzer::Workset> >
75 const std::string& elementBlock,
76 const std::vector<std::size_t>& local_cell_ids,
77 const std::vector<std::size_t>& local_side_ids,
78 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates,
79 const bool populate_value_arrays);
82 Teuchos::RCP<std::vector<panzer::Workset> >
84 const std::vector<std::size_t>&,
85 const std::vector<std::size_t>&,
86 const Kokkos::DynRankView<double,PHX::Device>&,
88 const std::vector<std::size_t>&,
89 const std::vector<std::size_t>&,
90 const Kokkos::DynRankView<double,PHX::Device>&);
93 Teuchos::RCP<std::map<unsigned,panzer::Workset> >
95 const std::vector<std::size_t>& local_cell_ids_a,
96 const std::vector<std::size_t>& local_side_ids_a,
97 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates_a,
99 const std::vector<std::size_t>& local_cell_ids_b,
100 const std::vector<std::size_t>& local_side_ids_b,
101 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates_b);
117 std::vector<RCP<const panzer::PureBasis> > bases;
118 std::vector<RCP<const panzer::IntegrationRule> > int_rules;
124 for(std::size_t i=0;i<needs.
int_rules.size();i++)
127 for(std::size_t i=0;i<needs.
bases.size();i++)
128 bases.push_back(rcp(
new PureBasis(needs.
bases[i]->type(),needs.
bases[i]->order(),side_cell_data)));
135 details.ir_degrees = rcp(
new std::vector<int>(0));
136 details.basis_names = rcp(
new std::vector<std::string>(0));
138 for(std::size_t i=0;i<int_rules.size();i++) {
140 details.ir_degrees->push_back(int_rules[i]->cubature_degree);
142 RCP<panzer::IntegrationValues2<double> > iv2 =
144 iv2->setupArrays(int_rules[i]);
145 if (Teuchos::nonnull(other_details))
146 iv2->evaluateValues(
details.cell_vertex_coordinates, other_details->int_rules[i]->ip_coordinates);
148 iv2->evaluateValues(
details.cell_vertex_coordinates);
150 details.int_rules.push_back(iv2);
153 for(std::size_t b=0;b<bases.size();b++) {
155 details.basis_names->push_back(b_layout->name());
157 std::size_t int_degree_index = std::distance(
details.ir_degrees->begin(),
158 std::find(
details.ir_degrees->begin(),
160 int_rules[i]->order()));
161 RCP<panzer::BasisValues2<double> > bv2 =
163 bv2->setupArrays(b_layout);
164 bv2->evaluateValues(
details.int_rules[int_degree_index]->cub_points,
165 details.int_rules[int_degree_index]->jac,
166 details.int_rules[int_degree_index]->jac_det,
167 details.int_rules[int_degree_index]->jac_inv,
168 details.int_rules[int_degree_index]->weighted_measure,
169 details.cell_vertex_coordinates);
186 for(std::map<
int,RCP<panzer::IntegrationRule> >::const_iterator ir_itr = int_rules.begin();
187 ir_itr != int_rules.end(); ++ir_itr)
188 needs.
int_rules.push_back(ir_itr->second);
190 const std::map<std::string,Teuchos::RCP<panzer::PureBasis> >& bases= pb.
getBases();
191 for(std::map<std::string,Teuchos::RCP<panzer::PureBasis> >::const_iterator b_itr = bases.begin();
192 b_itr != bases.end(); ++b_itr)
193 needs.
bases.push_back(b_itr->second);
Teuchos::RCP< std::map< unsigned, Workset > > buildBCWorkset(const PhysicsBlock &volume_pb, const std::vector< std::size_t > &local_cell_ids, const std::vector< std::size_t > &local_side_ids, const ArrayT &vertex_coordinates)
std::vector< Teuchos::RCP< const PureBasis > > bases
Object that contains information on the physics and discretization of a block of elements with the SA...
std::vector< Teuchos::RCP< const IntegrationRule > > int_rules
Teuchos::RCP< const shards::CellTopology > getCellTopology() const
Get CellTopology for the base cell.
Teuchos::RCP< std::vector< Workset > > buildEdgeWorksets(const PhysicsBlock &pb_a, const std::vector< std::size_t > &local_cell_ids_a, const std::vector< std::size_t > &local_side_ids_a, const ArrayT &vertex_coordinates_a, const PhysicsBlock &pb_b, const std::vector< std::size_t > &local_cell_ids_b, const std::vector< std::size_t > &local_side_ids_b, const ArrayT &vertex_coordinates_b)
Data for determining cell topology and dimensionality.
Teuchos::RCP< std::vector< Workset > > buildWorksets(const PhysicsBlock &pb, const std::vector< std::size_t > &local_cell_ids, const ArrayT &vertex_coordinates)
const panzer::CellData & cellData() const
const std::map< std::string, Teuchos::RCP< panzer::PureBasis > > & getBases() const
Returns the unique set of bases, key is the unique panzer::PureBasis::name() of the basis...
Description and data layouts associated with a particular basis.
void populateValueArrays(std::size_t num_cells, bool isSide, const WorksetNeeds &needs, WorksetDetails &details, const Teuchos::RCP< WorksetDetails > other_details)
const std::map< int, Teuchos::RCP< panzer::IntegrationRule > > & getIntegrationRules() const
Returns the unique set of point rules, key is the unique panzer::PointRule::name() ...