本文整理汇总了C++中STK_Interface::getElementBlockPart方法的典型用法代码示例。如果您正苦于以下问题:C++ STK_Interface::getElementBlockPart方法的具体用法?C++ STK_Interface::getElementBlockPart怎么用?C++ STK_Interface::getElementBlockPart使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类STK_Interface
的用法示例。
在下文中一共展示了STK_Interface::getElementBlockPart方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: buildBlock
void LineMeshFactory::buildBlock(stk::ParallelMachine parallelMach,int xBlock,STK_Interface & mesh) const
{
// grab this processors rank and machine size
std::pair<int,int> sizeAndStartX = determineXElemSizeAndStart(xBlock,machSize_,machRank_);
int myXElems_start = sizeAndStartX.first;
int myXElems_end = myXElems_start+sizeAndStartX.second;
int totalXElems = nXElems_*xBlocks_;
double deltaX = (xf_-x0_)/double(totalXElems);
// build the nodes
std::vector<double> coord(1,0.0);
for(int nx=myXElems_start;nx<myXElems_end+1;++nx) {
coord[0] = double(nx)*deltaX+x0_;
mesh.addNode(nx+1,coord);
}
std::stringstream blockName;
blockName << "eblock-" << xBlock;
stk::mesh::Part * block = mesh.getElementBlockPart(blockName.str());
// build the elements
for(int nx=myXElems_start;nx<myXElems_end;++nx) {
stk::mesh::EntityId gid = nx+1;
std::vector<stk::mesh::EntityId> nodes(2);
nodes[0] = nx+1;
nodes[1] = nodes[0]+1;
RCP<ElementDescriptor> ed = rcp(new ElementDescriptor(gid,nodes));
mesh.addElement(ed,block);
}
}
示例2: buildBlock
void MultiBlockMeshFactory::buildBlock(stk::ParallelMachine parallelMach,int xBlock,int yBlock,STK_Interface & mesh) const
{
int myXElems_start = (machRank_==0 ? 0 : 2);
int myXElems_end = (machRank_==0 ? 1 : 3);
int myYElems_start = 0;
int myYElems_end = 1;
int totalXElems = nXElems_*2;
int totalYElems = nYElems_*1;
double x0_ = 0.0;
double xf_ = 1.0;
double y0_ = 0.0;
double yf_ = 1.0;
double deltaX = (xf_-x0_)/double(totalXElems);
double deltaY = (yf_-y0_)/double(totalYElems);
std::vector<double> coord(2,0.0);
// build the nodes
for(int nx=myXElems_start;nx<myXElems_end+1;++nx) {
coord[0] = double(nx)*deltaX+x0_;
for(int ny=myYElems_start;ny<myYElems_end+1;++ny) {
coord[1] = double(ny)*deltaY+y0_;
mesh.addNode(ny*(totalXElems+1)+nx+1,coord);
}
}
std::stringstream blockName;
blockName << "eblock-" << xBlock << "_" << yBlock;
stk::mesh::Part * block = mesh.getElementBlockPart(blockName.str());
// build the elements
for(int nx=myXElems_start;nx<myXElems_end;++nx) {
for(int ny=myYElems_start;ny<myYElems_end;++ny) {
stk::mesh::EntityId gid = totalXElems*ny+nx+1;
std::vector<stk::mesh::EntityId> nodes(4);
nodes[0] = nx+1+ny*(totalXElems+1);
nodes[1] = nodes[0]+1;
nodes[2] = nodes[1]+(totalXElems+1);
nodes[3] = nodes[2]-1;
RCP<ElementDescriptor> ed = rcp(new ElementDescriptor(gid,nodes));
mesh.addElement(ed,block);
}
}
}
示例3: coords
void
CustomMeshFactory::buildElements(STK_Interface &mesh) const
{
mesh.beginModification();
const int dim = mesh.getDimension();
// build the nodes
std::vector<double> coords(dim,0.0);
for (int i=0;i<NumNodesPerProc_;++i) {
for (int k=0;k<dim;++k)
coords[k] = Coords_[i*dim+k];
mesh.addNode(Nodes_[i], coords);
}
// build the elements
std::vector<std::string> block_ids;
mesh.getElementBlockNames(block_ids);
for (int i=0;i<NumElementsPerProc_;++i) {
// get block by its name
std::stringstream block_id;
block_id << "eblock-" << BlockIDs_[i];
stk_classic::mesh::Part *block = mesh.getElementBlockPart(block_id.str());
// construct element and its nodal connectivity
stk_classic::mesh::EntityId elt = i + OffsetToGlobalElementIDs_;
std::vector<stk_classic::mesh::EntityId> elt2nodes(8);
for (int k=0;k<8;++k)
elt2nodes[k] = Element2Nodes_[i*8+k];
RCP<ElementDescriptor> ed = rcp(new ElementDescriptor(elt,elt2nodes));
mesh.addElement(ed,block);
}
mesh.endModification();
}
示例4: buildBlock
void SculptMeshFactory::buildBlock(stk_classic::ParallelMachine parallelMach,STK_Interface & mesh, int block_index, int *block_id, int elm_start, int *elements, int *nodes_per_element, int *elem_attributes, int **elmt_node_linkage ) const
{
struct MeshStorageStruct *mss = get_sculpt_mesh();
// add blocks
std::stringstream blockName;
blockName << "eblock-" << block_id[block_index];
stk_classic::mesh::Part * block = mesh.getElementBlockPart(blockName.str());
buildNodes( parallelMach, mesh );
// read element block properties
//read element connectivity information into a temporary array
if(elements[block_index]) {
int maximum_nodes = elements[block_index] * nodes_per_element[block_index];
elmt_node_linkage[block_index] = new int[maximum_nodes];
for(int ict = 0;ict < elements[block_index]; ict ++){
std::vector<stk_classic::mesh::EntityId> nodes(nodes_per_element[block_index]);
//std::cout<<"Element id = "<<elm_start+ ict<<std::endl;
//std::cout<<"Element global id = "<<mss->global_element_numbers[elm_start+ ict-1]<<std::endl;
for(int nct = 0; nct < nodes_per_element[block_index]; nct++){
elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct] = mss->elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct];
nodes[nct] = mss->global_node_numbers[elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct]-1];
//std::cout<<" Node linkage id = "<<elmt_node_linkage[block_index][(ict*nodes_per_element[block_index])+nct]<<std::endl;
//std::cout<<" Node global id = "<<nodes[nct]<<std::endl;
}
stk_classic::mesh::EntityId gid = mss->global_element_numbers[elm_start+ ict-1];
RCP<ElementDescriptor> ed = rcp(new ElementDescriptor(gid,nodes));
mesh.addElement(ed,block);
}
}
else {
elmt_node_linkage[block_index] = NULL;
}
}
示例5: buildBlock
void CubeTetMeshFactory::buildBlock(stk_classic::ParallelMachine parallelMach,int xBlock,int yBlock,int zBlock,STK_Interface & mesh) const
{
// grab this processors rank and machine size
std::pair<int,int> sizeAndStartX = determineXElemSizeAndStart(xBlock,xProcs_,machRank_);
std::pair<int,int> sizeAndStartY = determineYElemSizeAndStart(yBlock,yProcs_,machRank_);
std::pair<int,int> sizeAndStartZ = determineZElemSizeAndStart(zBlock,zProcs_,machRank_);
int myXElems_start = sizeAndStartX.first;
int myXElems_end = myXElems_start+sizeAndStartX.second;
int myYElems_start = sizeAndStartY.first;
int myYElems_end = myYElems_start+sizeAndStartY.second;
int myZElems_start = sizeAndStartZ.first;
int myZElems_end = myZElems_start+sizeAndStartZ.second;
int totalXElems = nXElems_*xBlocks_;
int totalYElems = nYElems_*yBlocks_;
int totalZElems = nZElems_*zBlocks_;
double deltaX = (xf_-x0_)/double(totalXElems);
double deltaY = (yf_-y0_)/double(totalYElems);
double deltaZ = (zf_-z0_)/double(totalZElems);
std::vector<double> coord(3,0.0);
// build the nodes
for(int nx=myXElems_start;nx<myXElems_end+1;++nx) {
coord[0] = double(nx)*deltaX+x0_;
for(int ny=myYElems_start;ny<myYElems_end+1;++ny) {
coord[1] = double(ny)*deltaY+y0_;
for(int nz=myZElems_start;nz<myZElems_end+1;++nz) {
coord[2] = double(nz)*deltaZ+z0_;
mesh.addNode(nz*(totalYElems+1)*(totalXElems+1)+ny*(totalXElems+1)+nx+1,coord);
}
}
}
std::stringstream blockName;
blockName << "eblock-" << xBlock << "_" << yBlock << "_" << zBlock;
stk_classic::mesh::Part * block = mesh.getElementBlockPart(blockName.str());
// build the elements
for(int nx=myXElems_start;nx<myXElems_end;++nx) {
for(int ny=myYElems_start;ny<myYElems_end;++ny) {
for(int nz=myZElems_start;nz<myZElems_end;++nz) {
std::vector<stk_classic::mesh::EntityId> nodes(8);
nodes[0] = nx+1+ny*(totalXElems+1) +nz*(totalYElems+1)*(totalXElems+1);
nodes[1] = nodes[0]+1;
nodes[2] = nodes[1]+(totalXElems+1);
nodes[3] = nodes[2]-1;
nodes[4] = nodes[0]+(totalYElems+1)*(totalXElems+1);
nodes[5] = nodes[1]+(totalYElems+1)*(totalXElems+1);
nodes[6] = nodes[2]+(totalYElems+1)*(totalXElems+1);
nodes[7] = nodes[3]+(totalYElems+1)*(totalXElems+1);
buildTetsOnHex(Teuchos::tuple(totalXElems,totalYElems,totalZElems),
Teuchos::tuple(nx,ny,nz),
block,nodes,mesh);
}
}
}
}