本文整理汇总了C++中ArrayT::dimension方法的典型用法代码示例。如果您正苦于以下问题:C++ ArrayT::dimension方法的具体用法?C++ ArrayT::dimension怎么用?C++ ArrayT::dimension使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ArrayT
的用法示例。
在下文中一共展示了ArrayT::dimension方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: rcp
//.........这里部分代码省略.........
i->details.push_back(Teuchos::rcpFromRef(*i));
return worksets_ptr;
} // end special case
{
std::size_t num_worksets = total_num_cells / workset_size;
bool last_set_is_full = true;
std::size_t last_workset_size = total_num_cells % workset_size;
if (last_workset_size != 0) {
num_worksets += 1;
last_set_is_full = false;
}
worksets.resize(num_worksets);
std::vector<panzer::Workset>::iterator i;
for (i = worksets.begin(); i != worksets.end(); ++i)
i->num_cells = workset_size;
if (!last_set_is_full) {
worksets.back().num_cells = last_workset_size;
}
}
// assign workset cell local ids
std::vector<std::size_t>::const_iterator local_begin = local_cell_ids.begin();
for (std::vector<panzer::Workset>::iterator wkst = worksets.begin(); wkst != worksets.end(); ++wkst) {
std::vector<std::size_t>::const_iterator begin_iter = local_begin;
std::vector<std::size_t>::const_iterator end_iter = begin_iter + wkst->num_cells;
local_begin = end_iter;
wkst->cell_local_ids.assign(begin_iter,end_iter);
wkst->cell_vertex_coordinates.resize(workset_size,
vertex_coordinates.dimension(1),
vertex_coordinates.dimension(2));
wkst->block_id = pb.elementBlockID();
wkst->subcell_dim = pb.cellData().baseCellDimension();
wkst->subcell_index = 0;
wkst->details.push_back(Teuchos::rcpFromRef(*wkst));
}
TEUCHOS_ASSERT(local_begin == local_cell_ids.end());
// Copy cell vertex coordinates into local workset arrays
std::size_t offset = 0;
for (std::vector<panzer::Workset>::iterator wkst = worksets.begin(); wkst != worksets.end(); ++wkst) {
for (std::size_t cell = 0; cell < wkst->num_cells; ++cell)
for (std::size_t vertex = 0; vertex < Teuchos::as<std::size_t>(vertex_coordinates.dimension(1)); ++ vertex)
for (std::size_t dim = 0; dim < Teuchos::as<std::size_t>(vertex_coordinates.dimension(2)); ++ dim)
wkst->cell_vertex_coordinates(cell,vertex,dim) = vertex_coordinates(cell + offset,vertex,dim);
offset += wkst->num_cells;
}
TEUCHOS_ASSERT(offset == Teuchos::as<std::size_t>(vertex_coordinates.dimension(0)));
// Set ir and basis arrayskset
RCP<vector<int> > ir_degrees = rcp(new vector<int>(0));
RCP<vector<string> > basis_names = rcp(new vector<string>(0));
for (std::vector<panzer::Workset>::iterator wkst = worksets.begin(); wkst != worksets.end(); ++wkst) {
wkst->ir_degrees = ir_degrees;
wkst->basis_names = basis_names;
}
const std::map<int,RCP<panzer::IntegrationRule> >& int_rules = pb.getIntegrationRules();
示例2: while
std::vector<panzer::Workset>::iterator
panzer::buildEdgeWorksets(const std::vector<std::size_t> & cell_indices,
const panzer::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 panzer::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,
std::vector<Workset>::iterator beg)
{
std::vector<Workset>::iterator wkst = beg;
std::size_t current_cell_index = 0;
while (current_cell_index<cell_indices.size()) {
std::size_t workset_size = pb_a.cellData().numCells();
// allocate workset details (associate one with the workset
// object itself)
wkst->details.resize(2);
wkst->details[0] = Teuchos::rcpFromRef(*wkst);
wkst->details[1] = Teuchos::rcp(new panzer::WorksetDetails);
wkst->subcell_dim = pb_a.cellData().baseCellDimension()-1;
wkst->details[0]->subcell_index = local_side_ids_a[cell_indices[current_cell_index]];
wkst->details[0]->block_id = pb_a.elementBlockID();
wkst->details[0]->cell_vertex_coordinates.resize(workset_size,
vertex_coordinates_a.dimension(1),
vertex_coordinates_a.dimension(2));
wkst->details[1]->subcell_index = local_side_ids_b[cell_indices[current_cell_index]];
wkst->details[1]->block_id = pb_b.elementBlockID();
wkst->details[1]->cell_vertex_coordinates.resize(workset_size,
vertex_coordinates_a.dimension(1),
vertex_coordinates_a.dimension(2));
std::size_t remaining_cells = cell_indices.size()-current_cell_index;
if(remaining_cells<workset_size)
workset_size = remaining_cells;
// this is the true number of cells in this workset
wkst->num_cells = workset_size;
wkst->details[0]->cell_local_ids.resize(workset_size);
wkst->details[1]->cell_local_ids.resize(workset_size);
for(std::size_t cell=0;cell<workset_size; cell++,current_cell_index++) {
wkst->details[0]->cell_local_ids[cell] = local_cell_ids_a[cell_indices[current_cell_index]];
wkst->details[1]->cell_local_ids[cell] = local_cell_ids_b[cell_indices[current_cell_index]];
for (std::size_t vertex = 0; vertex < Teuchos::as<std::size_t>(vertex_coordinates_a.dimension(1)); ++ vertex) {
for (std::size_t dim = 0; dim < Teuchos::as<std::size_t>(vertex_coordinates_a.dimension(2)); ++ dim) {
wkst->details[0]->cell_vertex_coordinates(cell,vertex,dim) = vertex_coordinates_a(cell_indices[current_cell_index],vertex,dim);
wkst->details[1]->cell_vertex_coordinates(cell,vertex,dim) = vertex_coordinates_b(cell_indices[current_cell_index],vertex,dim);
}
}
}
// fill the BasisValues and IntegrationValues arrays
std::size_t max_workset_size = pb_a.cellData().numCells();
populateValueArrays(max_workset_size,true,pb_a,*wkst->details[0]); // populate "side" values
populateValueArrays(max_workset_size,true,pb_b,*wkst->details[1]);
wkst++;
}
return wkst;
}
示例3: coords
Teuchos::RCP<std::map<unsigned,panzer::Workset> >
panzer::buildBCWorkset(const panzer::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)
{
using std::vector;
using std::map;
using std::string;
using Teuchos::RCP;
using Teuchos::rcp;
// key is local face index, value is workset with all elements
// for that local face
Teuchos::RCP<std::map<unsigned,panzer::Workset> > worksets_ptr =
Teuchos::rcp(new std::map<unsigned,panzer::Workset>);
// All elements of boundary condition should go into one workset.
// However due to design of Intrepid (requires same basis for all
// cells), we have to separate the workset based on the local side
// index. Each workset for a boundary condition is associated with
// a local side for the element
// std::cout << "local_side_ids.size() = " << local_side_ids.size()
// << std::endl;
TEUCHOS_ASSERT(local_side_ids.size() == local_cell_ids.size());
TEUCHOS_ASSERT(local_side_ids.size() == static_cast<std::size_t>(vertex_coordinates.dimension(0)));
// key is local face index, value is a pair of cell index and vector of element local ids
std::map<unsigned,std::vector<std::pair<std::size_t,std::size_t> > > element_list;
for (std::size_t cell=0; cell < local_cell_ids.size(); ++cell)
element_list[local_side_ids[cell]].push_back(std::make_pair(cell,local_cell_ids[cell]));
std::map<unsigned,panzer::Workset>& worksets = *worksets_ptr;
// create worksets
std::map<unsigned,std::vector<std::pair<std::size_t,std::size_t> > >::const_iterator side;
for (side = element_list.begin(); side != element_list.end(); ++side) {
std::vector<std::size_t>& cell_local_ids = worksets[side->first].cell_local_ids;
Intrepid::FieldContainer<double> & coords = worksets[side->first].cell_vertex_coordinates;
coords.resize(side->second.size(),vertex_coordinates.dimension(1),vertex_coordinates.dimension(2));
for (std::size_t cell = 0; cell < side->second.size(); ++cell) {
cell_local_ids.push_back(side->second[cell].second);
for (std::size_t vertex = 0; vertex < Teuchos::as<std::size_t>(vertex_coordinates.dimension(1)); ++ vertex)
for (std::size_t dim = 0; dim < Teuchos::as<std::size_t>(vertex_coordinates.dimension(2)); ++ dim)
coords(cell,vertex,dim) = vertex_coordinates(side->second[cell].first,vertex,dim);
}
worksets[side->first].num_cells = worksets[side->first].cell_local_ids.size();
worksets[side->first].block_id = volume_pb.elementBlockID();
worksets[side->first].subcell_dim = volume_pb.cellData().baseCellDimension() - 1;
worksets[side->first].subcell_index = side->first;
worksets[side->first].details.push_back(Teuchos::rcpFromRef(worksets[side->first]));
}
// setup the integration rules and bases
for (std::map<unsigned,panzer::Workset>::iterator wkst = worksets.begin();
wkst != worksets.end(); ++wkst) {
populateValueArrays(wkst->second.num_cells,true,volume_pb,wkst->second); // populate "side" values
}
return worksets_ptr;
}