44 #include <Teuchos_TimeMonitor.hpp> 45 #include <PanzerAdaptersSTK_config.hpp> 65 PANZER_FUNC_TIME_MONITOR(
"panzer::LineMeshFactory::buildMesh()");
71 mesh->initialize(parallelMach);
81 PANZER_FUNC_TIME_MONITOR(
"panzer::LineMeshFactory::buildUncomittedMesh()");
85 machRank_ = stk::parallel_machine_rank(parallelMach);
86 machSize_ = stk::parallel_machine_size(parallelMach);
101 PANZER_FUNC_TIME_MONITOR(
"panzer::LineMeshFactory::completeMeshConstruction()");
125 setMyParamList(paramList);
127 x0_ = paramList->get<
double>(
"X0");
128 xf_ = paramList->get<
double>(
"Xf");
129 xBlocks_ = paramList->get<
int>(
"X Blocks");
130 nXElems_ = paramList->get<
int>(
"X Elements");
139 static RCP<Teuchos::ParameterList> defaultParams;
142 if(defaultParams == Teuchos::null) {
143 defaultParams = rcp(
new Teuchos::ParameterList);
145 defaultParams->set<
double>(
"X0",0.0);
146 defaultParams->set<
double>(
"Xf",1.0);
147 defaultParams->set<
int>(
"X Blocks",1);
148 defaultParams->set<
int>(
"X Elements",5);
150 Teuchos::ParameterList & bcs = defaultParams->sublist(
"Periodic BCs");
151 bcs.set<
int>(
"Count",0);
154 return defaultParams;
160 RCP<Teuchos::ParameterList> validParams = rcp(
new Teuchos::ParameterList(*
getValidParameters()));
168 typedef shards::Line<2> LineTopo;
169 const CellTopologyData * ctd = shards::getCellTopologyData<LineTopo>();
170 const CellTopologyData * side_ctd = shards::CellTopology(ctd).getBaseCellTopologyData(0,0);
177 std::stringstream ebPostfix;
178 ebPostfix <<
"-" << bx;
194 for(
int xBlock=0;xBlock<
xBlocks_;xBlock++) {
205 int myXElems_start = sizeAndStartX.first;
206 int myXElems_end = myXElems_start+sizeAndStartX.second;
209 double deltaX = (
xf_-
x0_)/static_cast<double>(totalXElems);
212 std::vector<double> coord(1,0.0);
213 for(
int nx=myXElems_start;nx<myXElems_end+1;++nx) {
218 std::stringstream blockName;
219 blockName <<
"eblock-" << xBlock;
223 for(
int nx=myXElems_start;nx<myXElems_end;++nx) {
224 stk::mesh::EntityId gid = nx+1;
225 std::vector<stk::mesh::EntityId> nodes(2);
227 nodes[1] = nodes[0]+1;
237 unsigned int minElements =
nXElems_/size;
238 unsigned int extra =
nXElems_ - minElements*size;
240 TEUCHOS_ASSERT(minElements>0);
246 nume = minElements+1;
247 start = xProcLoc*(minElements+1);
251 start = extra*(minElements+1)+(xProcLoc-extra)*minElements;
254 return std::make_pair(start+
nXElems_*xBlock,nume);
260 const stk::mesh::EntityRank sideRank = mesh.
getSideRank();
265 stk::mesh::Part * left = mesh.
getSideset(
"left");
266 stk::mesh::Part * right = mesh.
getSideset(
"right");
268 std::vector<stk::mesh::Entity> localElmts;
272 std::vector<stk::mesh::Entity>::const_iterator itr;
273 for(itr=localElmts.begin();itr!=localElmts.end();++itr) {
274 stk::mesh::Entity element = (*itr);
277 std::size_t nx = gid-1;
282 if(nx+1==totalXElems) {
311 return Teuchos::tuple(i,j);
Teuchos::RCP< const Teuchos::ParameterList > getValidParameters() const
From ParameterListAcceptor.
stk::mesh::Part * getElementBlockPart(const std::string &name) const
get the block part
static void parsePeriodicBCList(const Teuchos::RCP< Teuchos::ParameterList > &pl, std::vector< Teuchos::RCP< const PeriodicBC_MatcherBase > > &periodicBC, bool &useBBoxSearch)
void buildBlock(stk::ParallelMachine machRank, int xBlock, STK_Interface &mesh) const
void buildElements(stk::ParallelMachine parallelMach, STK_Interface &mesh) const
void getMyElements(std::vector< stk::mesh::Entity > &elements) const
void addEntityToSideset(stk::mesh::Entity entity, stk::mesh::Part *sideset)
Teuchos::Tuple< std::size_t, 2 > procTuple_
stk::mesh::EntityRank getSideRank() const
stk::mesh::Entity findConnectivityById(stk::mesh::Entity src, stk::mesh::EntityRank tgt_rank, unsigned rel_id) const
Teuchos::Tuple< std::size_t, 2 > procRankToProcTuple(std::size_t procRank) const
what is the 2D tuple describe this processor distribution
void addSideSets(STK_Interface &mesh) const
virtual void completeMeshConstruction(STK_Interface &mesh, stk::ParallelMachine parallelMach) const
stk::mesh::Part * getSideset(const std::string &name) const
void addElement(const Teuchos::RCP< ElementDescriptor > &ed, stk::mesh::Part *block)
stk::mesh::EntityId elementGlobalId(std::size_t lid) const
void initialize(stk::ParallelMachine parallelMach, bool setupIO=true, const bool buildRefinementSupport=false)
std::pair< int, int > determineXElemSizeAndStart(int xBlock, unsigned int size, unsigned int rank) const
double getMeshCoord(const int nx, const double deltaX, const double x0) const
bool isInitialized() const
Has initialize been called on this mesh object?
void buildMetaData(stk::ParallelMachine parallelMach, STK_Interface &mesh) const
virtual Teuchos::RCP< STK_Interface > buildUncommitedMesh(stk::ParallelMachine parallelMach) const
void addNode(stk::mesh::EntityId gid, const std::vector< double > &coord)
void buildSubcells()
force the mesh to build subcells: edges and faces
void addSideset(const std::string &name, const CellTopologyData *ctData)
std::vector< Teuchos::RCP< const PeriodicBC_MatcherBase > > periodicBCVec_
void buildLocalElementIDs()
unsigned entityOwnerRank(stk::mesh::Entity entity) const
void rebalance(STK_Interface &mesh) const
LineMeshFactory()
Constructor.
void addElementBlock(const std::string &name, const CellTopologyData *ctData)
~LineMeshFactory()
Destructor.
void setParameterList(const Teuchos::RCP< Teuchos::ParameterList > ¶mList)
From ParameterListAcceptor.
Teuchos::RCP< STK_Interface > buildMesh(stk::ParallelMachine parallelMach) const
Build the mesh object.
void initializeWithDefaults()