43 #include "PanzerDiscFE_config.hpp" 53 const std::string & elementBlock,
54 const std::vector<std::size_t>& local_cell_ids,
55 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates);
60 const std::string& elementBlock,
61 const std::vector<std::size_t>& local_cell_ids,
62 const std::vector<std::size_t>& local_side_ids,
63 const Kokkos::DynRankView<double,PHX::Device>& vertex_coordinates,
64 const bool populate_value_arrays);
69 const std::string & blockid_a,
70 const std::vector<std::size_t>& local_cell_ids_a,
71 const std::vector<std::size_t>& local_side_ids_a,
72 const Kokkos::DynRankView<double,PHX::Device> & vertex_coordinates_a,
74 const std::string & blockid_b,
75 const std::vector<std::size_t>& local_cell_ids_b,
76 const std::vector<std::size_t>& local_side_ids_b,
77 const Kokkos::DynRankView<double,PHX::Device> & vertex_coordinates_b);
82 const std::string & eblock_a,
83 const std::vector<std::size_t>& local_cell_ids_a,
84 const std::vector<std::size_t>& local_side_ids_a,
85 const Kokkos::DynRankView<double,PHX::Device> & vertex_coordinates_a,
87 const std::string & eblock_b,
88 const std::vector<std::size_t>& local_cell_ids_b,
89 const std::vector<std::size_t>& local_side_ids_b,
90 const Kokkos::DynRankView<double,PHX::Device> & vertex_coordinates_b);
103 if(
details.numOwnedCells()==-1)
104 details.setNumberOfCells(num_cells,0,0);
105 if(other_details!=Teuchos::null and other_details->
numOwnedCells()==-1)
112 std::vector<RCP<const panzer::PureBasis> > bases;
113 std::vector<RCP<const panzer::IntegrationRule> > int_rules;
119 for(std::size_t i=0;i<needs.
int_rules.size();i++)
122 for(std::size_t i=0;i<needs.
bases.size();i++)
130 details.ir_degrees =
rcp(
new std::vector<int>(0));
131 details.basis_names =
rcp(
new std::vector<std::string>(0));
133 for(std::size_t i=0;i<int_rules.size();i++) {
135 details.ir_degrees->push_back(int_rules[i]->cubature_degree);
139 iv2->setupArrays(int_rules[i]);
141 iv2->evaluateValues(
details.cell_vertex_coordinates, other_details->
int_rules[i]->ip_coordinates);
143 iv2->evaluateValues(
details.cell_vertex_coordinates);
145 details.int_rules.push_back(iv2);
148 for(std::size_t b=0;b<bases.size();b++) {
152 std::size_t int_degree_index = std::distance(
details.ir_degrees->begin(),
153 std::find(
details.ir_degrees->begin(),
155 int_rules[i]->order()));
158 bv2->setupArrays(b_layout);
159 bv2->evaluateValues(
details.int_rules[int_degree_index]->cub_points,
160 details.int_rules[int_degree_index]->jac,
161 details.int_rules[int_degree_index]->jac_det,
162 details.int_rules[int_degree_index]->jac_inv,
163 details.int_rules[int_degree_index]->weighted_measure,
164 details.cell_vertex_coordinates);
std::vector< Teuchos::RCP< const PureBasis > > bases
Teuchos::RCP< std::vector< Workset > > buildEdgeWorksets(const WorksetNeeds &needs_a, const std::string &eblock_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 WorksetNeeds &needs_b, const std::string &eblock_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)
bool nonnull(const std::shared_ptr< T > &p)
Teuchos::RCP< std::vector< Workset > > buildWorksets(const WorksetNeeds &needs, const std::string &elementBlock, const std::vector< std::size_t > &local_cell_ids, const ArrayT &vertex_coordinates)
std::vector< Teuchos::RCP< const IntegrationRule > > int_rules
Teuchos::RCP< const shards::CellTopology > getCellTopology() const
Get CellTopology for the base cell.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< std::map< unsigned, Workset > > buildBCWorkset(const WorksetNeeds &needs, const std::string &elementBlock, const std::vector< std::size_t > &local_cell_ids, const std::vector< std::size_t > &local_side_ids, const ArrayT &vertex_coordinates, const bool populate_value_arrays=true)
Data for determining cell topology and dimensionality.
void setNumberOfCells(int o_cells, int g_cells, int v_cells)
Provides access to set numbers of cells (required for backwards compatibility)
std::vector< Teuchos::RCP< panzer::IntegrationValues2< double > > > int_rules
int numOwnedCells() const
Number of cells owned by this workset.
std::string name() const
Unique key for workset indexing composed of basis name and point rule name.
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)