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);
100 PANZER_FUNC_TIME_MONITOR(
"panzer::LineMeshFactory::completeMeshConstruction()");
124 setMyParamList(paramList);
126 x0_ = paramList->get<
double>(
"X0");
127 xf_ = paramList->get<
double>(
"Xf");
128 xBlocks_ = paramList->get<
int>(
"X Blocks");
129 nXElems_ = paramList->get<
int>(
"X Elements");
138 static RCP<Teuchos::ParameterList> defaultParams;
141 if(defaultParams == Teuchos::null) {
142 defaultParams = rcp(
new Teuchos::ParameterList);
144 defaultParams->set<
double>(
"X0",0.0);
145 defaultParams->set<
double>(
"Xf",1.0);
146 defaultParams->set<
int>(
"X Blocks",1);
147 defaultParams->set<
int>(
"X Elements",5);
149 Teuchos::ParameterList & bcs = defaultParams->sublist(
"Periodic BCs");
150 bcs.set<
int>(
"Count",0);
153 return defaultParams;
159 RCP<Teuchos::ParameterList> validParams = rcp(
new Teuchos::ParameterList(*
getValidParameters()));
167 typedef shards::Line<2> LineTopo;
168 const CellTopologyData * ctd = shards::getCellTopologyData<LineTopo>();
169 const CellTopologyData * side_ctd = shards::CellTopology(ctd).getBaseCellTopologyData(0,0);
176 std::stringstream ebPostfix;
177 ebPostfix <<
"-" << bx;
193 for(
int xBlock=0;xBlock<
xBlocks_;xBlock++) {
204 int myXElems_start = sizeAndStartX.first;
205 int myXElems_end = myXElems_start+sizeAndStartX.second;
208 double deltaX = (
xf_-
x0_)/
double(totalXElems);
211 std::vector<double> coord(1,0.0);
212 for(
int nx=myXElems_start;nx<myXElems_end+1;++nx) {
213 coord[0] = double(nx)*deltaX+
x0_;
217 std::stringstream blockName;
218 blockName <<
"eblock-" << xBlock;
222 for(
int nx=myXElems_start;nx<myXElems_end;++nx) {
223 stk::mesh::EntityId gid = nx+1;
224 std::vector<stk::mesh::EntityId> nodes(2);
226 nodes[1] = nodes[0]+1;
236 unsigned int minElements =
nXElems_/size;
237 unsigned int extra =
nXElems_ - minElements*size;
239 TEUCHOS_ASSERT(minElements>0);
245 nume = minElements+1;
246 start = xProcLoc*(minElements+1);
250 start = extra*(minElements+1)+(xProcLoc-extra)*minElements;
253 return std::make_pair(start+
nXElems_*xBlock,nume);
259 const stk::mesh::EntityRank sideRank = mesh.
getSideRank();
264 stk::mesh::Part * left = mesh.
getSideset(
"left");
265 stk::mesh::Part * right = mesh.
getSideset(
"right");
267 std::vector<stk::mesh::Entity> localElmts;
271 std::vector<stk::mesh::Entity>::const_iterator itr;
272 for(itr=localElmts.begin();itr!=localElmts.end();++itr) {
273 stk::mesh::Entity element = (*itr);
276 std::size_t nx = gid-1;
281 if(nx+1==totalXElems) {
310 return Teuchos::tuple(i,j);