26 #ifndef _GRID_FACTORY_HH_
27 #define _GRID_FACTORY_HH_
37 template<
typename CellT >
40 const std :: string
newCl(
const std :: string &clName,
const Scalar &clValue);
43 template<
typename CellT >
79 std :: vector< TrianglesBlock >
vBlTr_;
80 std :: vector< QuadranglesBlock >
vBlQd_;
113 stepper_.init( inData_->blockNumber() );
119 #if VERBOSE_LEVEL >= 1
120 std :: cout <<
"-- output directory name\n";
123 if ( outpuDirName0 !=
"" ) {
124 #if VERBOSE_LEVEL >= 1
125 std :: cout <<
"The output directory name is explicitly given : " << outpuDirName0 <<
"\n";
127 return outpuDirName0;
130 std :: string xMinString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->xMin() ) )->str();
131 std :: string xMaxString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->xMax() ) )->str();
133 std :: string bnCoeffxString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->blockNumberController() [ 0 ] ) )->str();
134 std :: string bnCoeffyString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->blockNumberController() [ 1 ] ) )->str();
136 std :: string drString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->dr() ) )->str();
137 std :: string rafCoeffString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->rafCoeff() ) )->str();
139 std :: string blockCenterRandSeqIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->blockCenterRandSeqId() ) )->str();
140 std :: string blockAngleRandSeqIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->blockAngleRandSeqId() ) )->str();
142 std :: string blockCenterPertCoeffString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->blockCenterPertCoeff() ) )->str();
144 std :: string dist2BoundCoeffString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->dist2BoundCoeff() ) )->str();
145 std :: string interBlockDistCoeffString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->interBlockDistCoeff() ) )->str();
147 std :: string outpuDirName1 =
"xMin" + xMinString +
"_"
148 +
"xMax" + xMaxString +
"_"
149 +
"bnCx" + bnCoeffxString +
"_"
150 +
"bnCy" + bnCoeffyString +
"_"
151 +
"dr" + drString +
"_"
152 +
"rafC" + rafCoeffString +
"_"
153 +
"bCId" + blockCenterRandSeqIdString +
"_"
154 +
"bAId" + blockAngleRandSeqIdString +
"_"
155 +
"bCPC" + blockCenterPertCoeffString +
"_"
156 +
"d2bC" + dist2BoundCoeffString +
"_"
157 +
"intbC" + interBlockDistCoeffString;
159 #if VERBOSE_LEVEL >= 1
160 std :: cout <<
"The output directory name is computed : " << outpuDirName1 <<
"\n";
163 return outpuDirName1;
169 #if OUTPUT_MFILES_DIR_CREATED == 0
170 const std :: string createDirectoryCommandString =
"mkdir -p " + inData_->outputPath() +
"m/" +
outputDirName_;
171 char *createDirectoryCommandChar = (
char * ) createDirectoryCommandString.c_str();
172 system(createDirectoryCommandChar);
173 #define OUTPUT_MFILES_DIR_CREATED 1
180 unsigned int pointsMaxId = 1, edgesMaxId = 1, cellsQdMaxId = 1;
184 #if CLOCKWISE_ROTATION_SENSE == 0
185 blPtExtBound_.add(
Point( inData_->xMin(), inData_->yMin( inData_->xMin() ) ) );
186 blPtExtBound_.add(
Point( inData_->xMin(), inData_->yMax( inData_->xMin() ) ) );
187 blPtExtBound_.add(
Point( inData_->xMax(), inData_->yMax( inData_->xMax() ) ) );
188 blPtExtBound_.add(
Point( inData_->xMax(), inData_->yMin( inData_->xMax() ) ) );
190 #if CLOCKWISE_ROTATION_SENSE == 1
191 blPtExtBound_.add(
Point( inData_->xMin(), inData_->yMin( inData_->xMin() ) ) );
192 blPtExtBound_.add(
Point( inData_->xMax(), inData_->yMin( inData_->xMax() ) ) );
193 blPtExtBound_.add(
Point( inData_->xMax(), inData_->yMax( inData_->xMax() ) ) );
194 blPtExtBound_.add(
Point( inData_->xMin(), inData_->yMax( inData_->xMin() ) ) );
198 pointsMaxId = blPtExtBound_.putId(pointsMaxId);
199 blPtExtBound_.putMarkerProperties(
"'s'"
206 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 1 ) )
208 mEnities.
openFile(outputDirName_ +
"/mEnities");
209 mEnities.
write(blPtExtBound_,
true);
211 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
212 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
217 blEdExtBound_.add(
Edge(& blPtExtBound_.vEnt() [ 0 ], & blPtExtBound_.vEnt() [ 1 ]) );
218 blEdExtBound_.add(
Edge(& blPtExtBound_.vEnt() [ 1 ], & blPtExtBound_.vEnt() [ 2 ]) );
219 blEdExtBound_.add(
Edge(& blPtExtBound_.vEnt() [ 2 ], & blPtExtBound_.vEnt() [ 3 ]) );
220 blEdExtBound_.add(
Edge(& blPtExtBound_.vEnt() [ 3 ], & blPtExtBound_.vEnt() [ 0 ]) );
222 vEdExtBound_.clear();
223 for (
unsigned int ieExt = 0; ieExt < blEdExtBound_.size(); ++ieExt ) {
224 vEdExtBound_.push_back(& blEdExtBound_.vEnt() [ ieExt ]);
225 vEdExtBound_.back()->onBlockBoundary() =
true;
229 edgesMaxId = blEdExtBound_.putId(edgesMaxId);
234 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 2 ) )
236 mEnities.
openFile(outputDirName_ +
"/mEnities");
237 mEnities.
write(blPtExtBound_,
true);
238 mEnities.
write(blEdExtBound_,
true);
240 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
241 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
245 vBlPtI_.fill(stepper_);
246 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
248 pointsMaxId = vBlPtI_ [ iBl ].putId(pointsMaxId);
249 vBlPtI_ [ iBl ].putMarkerProperties(
"'s'"
257 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 3 ) )
259 mEnities.
openFile(outputDirName_ +
"/mEnities");
260 mEnities.
write(blPtExtBound_,
true);
261 mEnities.
write(blEdExtBound_,
true);
262 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
263 mEnities.
write(vBlPtI_ [ iBl ],
true);
267 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
268 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
273 vBlPtJ_.fill(stepper_);
274 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
276 pointsMaxId = vBlPtJ_ [ iBl ].putId(pointsMaxId);
277 vBlPtJ_ [ iBl ].putMarkerProperties(
"'s'"
285 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 4 ) )
287 mEnities.
openFile(outputDirName_ +
"/mEnities");
288 mEnities.
write(blPtExtBound_,
true);
289 mEnities.
write(blEdExtBound_,
true);
290 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
291 mEnities.
write(vBlPtI_ [ iBl ],
true);
292 mEnities.
write(vBlPtJ_ [ iBl ],
false);
296 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
297 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
307 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 5 ) )
309 mEnities.
openFile(outputDirName_ +
"/mEnities");
310 mEnities.
write(blPtExtBound_,
true);
311 mEnities.
write(blEdExtBound_,
true);
312 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
313 mEnities.
write(vBlPtI_ [ iBl ],
true);
314 mEnities.
write(vBlPtJ_ [ iBl ],
false);
318 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
319 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
326 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 6 ) )
328 mEnities.
openFile(outputDirName_ +
"/mEnities");
329 mEnities.
write(blPtExtBound_,
true);
330 mEnities.
write(blEdExtBound_,
true);
331 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
332 mEnities.
write(vBlPtI_ [ iBl ],
true);
333 mEnities.
write(vBlPtJ_ [ iBl ],
true);
337 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
338 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
348 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
350 edgesMaxId = vBlEd_ [ iBl ].putId(edgesMaxId);
356 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 7 ) )
358 mEnities.
openFile(outputDirName_ +
"/mEnities");
359 mEnities.
write(blPtExtBound_,
true);
360 mEnities.
write(blEdExtBound_,
true);
361 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
362 mEnities.
write(vBlPtI_ [ iBl ],
true);
363 mEnities.
write(vBlPtJ_ [ iBl ],
false);
364 mEnities.
write(vBlEd_ [ iBl ],
true);
368 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
369 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
379 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
381 cellsQdMaxId = vBlQd_ [ iBl ].putId(cellsQdMaxId);
387 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 8 ) )
389 mEnities.
openFile(outputDirName_ +
"/mEnities");
390 mEnities.
write(blPtExtBound_,
true);
391 mEnities.
write(blEdExtBound_,
true);
392 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
393 mEnities.
write(vBlPtI_ [ iBl ],
true);
394 mEnities.
write(vBlPtJ_ [ iBl ],
false);
395 mEnities.
write(vBlEd_ [ iBl ],
false);
396 mEnities.
write(vBlQd_ [ iBl ],
true);
400 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
401 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
414 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 9 ) )
416 mEnities.
openFile(outputDirName_ +
"/mEnities");
417 mEnities.
write(blPtExtBound_,
true);
418 mEnities.
write(blEdExtBound_,
true);
419 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
420 mEnities.
write(vBlPtI_ [ iBl ],
true);
421 mEnities.
write(vBlPtJ_ [ iBl ],
false);
422 mEnities.
write(vBlEd_ [ iBl ],
false);
423 mEnities.
write(vBlQd_ [ iBl ],
true);
427 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
428 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
437 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 10 ) )
439 mEnities.
openFile(outputDirName_ +
"/mEnities");
440 mEnities.
write(blPtExtBound_,
true);
441 mEnities.
write(blEdExtBound_,
true);
442 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
443 mEnities.
write(vBlPtI_ [ iBl ],
true);
444 mEnities.
write(vBlPtJ_ [ iBl ],
false);
445 mEnities.
write(vBlEd_ [ iBl ],
false);
446 mEnities.
write(vBlQd_ [ iBl ],
true);
450 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
451 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
458 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 11 ) )
460 mEnities.
openFile(outputDirName_ +
"/mEnities");
461 mEnities.
write(blPtExtBound_,
true);
462 mEnities.
write(blEdExtBound_,
true);
463 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
464 mEnities.
write(vBlPtI_ [ iBl ],
true);
465 mEnities.
write(vBlPtJ_ [ iBl ],
false);
466 mEnities.
write(vBlEd_ [ iBl ],
false);
467 mEnities.
write(vBlQd_ [ iBl ],
true);
471 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
472 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
479 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 12 ) )
481 mEnities.
openFile(outputDirName_ +
"/mEnities");
482 mEnities.
write(blPtExtBound_,
true);
483 mEnities.
write(blEdExtBound_,
true);
484 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
485 mEnities.
write(vBlPtI_ [ iBl ],
true);
486 mEnities.
write(vBlPtJ_ [ iBl ],
false);
487 mEnities.
write(vBlEd_ [ iBl ],
false);
488 mEnities.
write(vBlQd_ [ iBl ],
true);
492 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
493 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
500 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 13 ) )
502 mEnities.
openFile(outputDirName_ +
"/mEnities");
503 mEnities.
write(blPtExtBound_,
true);
504 mEnities.
write(blEdExtBound_,
true);
505 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
507 mEnities.
write(vBlPtI_ [ iBl ],
true);
508 mEnities.
write(vBlPtJ_ [ iBl ],
false);
509 mEnities.
write(vBlEd_ [ iBl ],
false);
510 mEnities.
write(vBlQd_ [ iBl ],
true);
512 mEnities.
write(vBlPtI_ [ iBl ],
false);
513 mEnities.
write(vBlPtJ_ [ iBl ],
false);
514 mEnities.
write(vBlEd_ [ iBl ],
false);
515 mEnities.
write(vBlQd_ [ iBl ],
false);
519 for (
int iQd1 = 0; iQd1 < vBlQd_.size(); ++iQd1 ) {
520 if ( vBlQd_ [ 13 ].vEnt() [ iQd1 ].Id() == 7102 ) {
521 bool isolatedCell =
true;
522 for (
unsigned int iEd1 = 0; iEd1 < 4; ++iEd1 ) {
523 std :: cout <<
"vBlQd_[13].vEnt()[iQd1].vEd()[iEd1]->vCel().size() = "
524 << vBlQd_ [ 13 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->vCel().size() <<
"\n";
526 if ( vBlQd_ [ 13 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->vCel().size() != 1 ) {
527 isolatedCell =
false;
535 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
536 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
544 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 14 ) )
546 mEnities.
openFile(outputDirName_ +
"/mEnities");
547 mEnities.
write(blPtExtBound_,
true);
548 mEnities.
write(blEdExtBound_,
true);
549 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
550 mEnities.
write(vBlPtI_ [ iBl ],
true);
551 mEnities.
write(vBlPtJ_ [ iBl ],
false);
552 mEnities.
write(vBlEd_ [ iBl ],
false);
553 mEnities.
write(vBlQd_ [ iBl ],
true);
557 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
558 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
565 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 15 ) )
567 mEnities.
openFile(outputDirName_ +
"/mEnities");
568 mEnities.
write(blPtExtBound_,
true);
569 mEnities.
write(blEdExtBound_,
true);
570 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
571 mEnities.
write(vBlPtI_ [ iBl ],
true);
572 mEnities.
write(vBlPtJ_ [ iBl ],
false);
573 mEnities.
write(vBlEd_ [ iBl ],
false);
574 mEnities.
write(vBlQd_ [ iBl ],
true);
578 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
579 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
583 #if ( ( ENABLE_MFILES_OUTPUT == 1 ) && ( WRITE_MFILES == 1 ) )
588 #if ENABLE_GEOFILES_OUTPUT == 1
594 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 16 ) )
596 mEnities.
openFile(outputDirName_ +
"/mEnities");
597 mEnities.
write(blPtExtBound_,
true);
598 mEnities.
write(blEdExtBound_,
true);
599 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
600 mEnities.
write(vBlPtI_ [ iBl ],
true);
602 mEnities.
write(vBlEd_ [ iBl ],
false);
603 mEnities.
write(vBlQd_ [ iBl ],
true);
607 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
608 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
613 #if ( ( DEV_MOD == 1 ) && ( ENABLE_DEV_MODE == 17 ) )
615 mEnities.
openFile(outputDirName_ +
"/mEnities");
616 mEnities.
write(blPtExtBound_,
true);
617 mEnities.
write(blEdExtBound_,
true);
618 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
619 mEnities.
write(vBlPtI_ [ iBl ],
true);
621 mEnities.
write(vBlEd_ [ iBl ],
false);
622 mEnities.
write(vBlQd_ [ iBl ],
true);
626 std :: cerr <<
"ENABLE_DEV_MODE = " << ENABLE_DEV_MODE <<
"\n";
627 std :: cerr <<
"exiting the program by calling : std::exit(1);\n";
649 #if VERBOSE_LEVEL >= 2
650 std :: cout <<
"-- fill vpNeighbor0_\n";
652 Scalar diag = inData_->dr() / sqrt(2.0);
655 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
656 for (
unsigned int iPt = 0; iPt < vBlPtI_ [ iBl ].size(); ++iPt ) {
657 vBlPtI_ [ iBl ].vEnt() [ iPt ].vpNeighbor0().clear();
658 for (
unsigned int jPt = 0; jPt < vBlPtJ_ [ iBl ].size(); ++jPt ) {
659 Scalar diff = eucDistance(vBlPtI_ [ iBl ].vEnt() [ iPt ], vBlPtJ_ [ iBl ].vEnt() [ jPt ]);
662 vBlPtI_ [ iBl ].vEnt() [ iPt ].vpNeighbor0().push_back(& vBlPtJ_ [ iBl ].vEnt() [ jPt ]);
665 if ( vBlPtI_ [ iBl ].vEnt() [ iPt ].vpNeighbor0().size() == 4 ) {
673 for (
unsigned int jBl = 0; jBl < inData_->blockNumber(); ++jBl ) {
674 for (
unsigned int jPt = 0; jPt < vBlPtJ_ [ jBl ].size(); ++jPt ) {
675 vBlPtJ_ [ jBl ].vEnt() [ jPt ].vpNeighbor0().clear();
676 for (
unsigned int iPt = 0; iPt < vBlPtI_ [ jBl ].size(); ++iPt ) {
677 Scalar diff = eucDistance(vBlPtJ_ [ jBl ].vEnt() [ jPt ], vBlPtI_ [ jBl ].vEnt() [ iPt ]);
680 vBlPtJ_ [ jBl ].vEnt() [ jPt ].vpNeighbor0().push_back(& vBlPtI_ [ jBl ].vEnt() [ iPt ]);
683 if ( vBlPtJ_ [ jBl ].vEnt() [ jPt ].vpNeighbor0().size() == 4 ) {
693 #if VERBOSE_LEVEL >= 2
694 std :: cout <<
"-- fill vpNeighbor1_\n";
696 Scalar diag = inData_->dr() / sqrt(2.0);
699 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
700 for (
unsigned int iPt1 = 0; iPt1 < vBlPtI_ [ iBl ].size(); ++iPt1 ) {
701 vBlPtI_ [ iBl ].vEnt() [ iPt1 ].vpNeighbor1().clear();
702 for (
unsigned int iPt2 = 0; iPt2 < vBlPtI_ [ iBl ].size(); ++iPt2 ) {
703 Scalar diff = eucDistance(vBlPtI_ [ iBl ].vEnt() [ iPt1 ], vBlPtI_ [ iBl ].vEnt() [ iPt2 ]);
706 vBlPtI_ [ iBl ].vEnt() [ iPt1 ].vpNeighbor1().push_back(& vBlPtI_ [ iBl ].vEnt() [ iPt2 ]);
709 if ( vBlPtI_ [ iBl ].vEnt() [ iPt1 ].vpNeighbor1().size() == 4 ) {
717 for (
unsigned int jBl = 0; jBl < inData_->blockNumber(); ++jBl ) {
718 for (
unsigned int jPt1 = 0; jPt1 < vBlPtJ_ [ jBl ].size(); ++jPt1 ) {
719 vBlPtJ_ [ jBl ].vEnt() [ jPt1 ].vpNeighbor1().clear();
720 for (
unsigned int jPt2 = 0; jPt2 < vBlPtJ_ [ jBl ].size(); ++jPt2 ) {
721 Scalar diff = eucDistance(vBlPtJ_ [ jBl ].vEnt() [ jPt1 ], vBlPtJ_ [ jBl ].vEnt() [ jPt2 ]);
724 vBlPtJ_ [ jBl ].vEnt() [ jPt1 ].vpNeighbor1().push_back(& vBlPtJ_ [ jBl ].vEnt() [ jPt2 ]);
727 if ( vBlPtJ_ [ jBl ].vEnt() [ jPt1 ].vpNeighbor1().size() == 4 ) {
737 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
738 for (
unsigned int iPt = 0; iPt < vBlPtI_ [ iBl ].size(); ++iPt ) {
739 if ( vBlPtI_ [ iBl ].vEnt() [ iPt ].vpNeighbor0().size() < 4 ) {
740 if ( !vBlPtI_ [ iBl ].vEnt() [ iPt ].onBlockBoundary() ) {
741 vBlPtI_ [ iBl ].vEnt() [ iPt ].onBlockBoundary() =
true;
742 #if ENABLE_MFILES_OUTPUT == 1
743 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().size += 4;
744 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().edgeColor =
Blue;
745 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().faceColor =
Red;
751 for (
unsigned int iPt = 0; iPt < vBlPtI_ [ iBl ].size(); ++iPt ) {
752 if ( vBlPtI_ [ iBl ].vEnt() [ iPt ].vpNeighbor1().size() < 4 ) {
753 if ( !vBlPtI_ [ iBl ].vEnt() [ iPt ].onBlockBoundary() ) {
754 vBlPtI_ [ iBl ].vEnt() [ iPt ].onBlockBoundary() =
true;
755 #if ENABLE_MFILES_OUTPUT == 1
756 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().size += 4;
757 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().edgeColor =
Magenta;
758 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().faceColor =
Red;
764 std :: vector< Point * > vPt1;
766 for (
unsigned int iPt1 = 0; iPt1 < vBlPtI_ [ iBl ].size(); ++iPt1 ) {
767 if ( vBlPtI_ [ iBl ].vEnt() [ iPt1 ].vpNeighbor1().size() != 4 ) {
776 if ( vBlPtI_ [ iBl ].vEnt() [ iPt1 ].onBlockBoundvpNeighbor1().size() >= 2 ) {
777 if ( !vBlPtI_ [ iBl ].vEnt() [ iPt1 ].onBlockBoundary() ) {
778 vPt1.push_back(& vBlPtI_ [ iBl ].vEnt() [ iPt1 ]);
783 for (
unsigned int iPt1 = 0; iPt1 < vPt1.size(); ++iPt1 ) {
784 if ( !vPt1 [ iPt1 ]->onBlockBoundary() ) {
785 vPt1 [ iPt1 ]->onBlockBoundary() =
true;
786 #if ENABLE_MFILES_OUTPUT == 1
787 vPt1 [ iPt1 ]->marker().size += 4;
788 vPt1 [ iPt1 ]->marker().edgeColor =
Yellow;
789 vPt1 [ iPt1 ]->marker().faceColor =
Red;
798 for (
unsigned int jBl = 0; jBl < inData_->blockNumber(); ++jBl ) {
799 for (
unsigned int jPt = 0; jPt < vBlPtJ_ [ jBl ].size(); ++jPt ) {
801 if ( vBlPtJ_ [ jBl ].vEnt() [ jPt ].vpNeighbor0().size() < 4 ) {
802 if ( !vBlPtJ_ [ jBl ].vEnt() [ jPt ].mark() ) {
803 vBlPtJ_ [ jBl ].vEnt() [ jPt ].mark() =
true;
804 #if ENABLE_MFILES_OUTPUT == 1
805 vBlPtJ_ [ jBl ].vEnt() [ jPt ].marker().size += 4;
806 vBlPtJ_ [ jBl ].vEnt() [ jPt ].marker().faceColor =
Cyan;
816 #if VERBOSE_LEVEL >= 2
817 std :: cout <<
"-- fill vBlEd_\n";
819 vBlEd_.resize( inData_->blockNumber() );
820 for (
unsigned int jBl = 0; jBl < inData_->blockNumber(); ++jBl ) {
821 vBlEd_ [ jBl ].clear();
822 for (
unsigned int jPt = 0; jPt < vBlPtJ_ [ jBl ].size(); ++jPt ) {
823 if ( vBlPtJ_ [ jBl ].vEnt() [ jPt ].vpNeighbor0().size() != 4 ) {
828 std :: vector< Point * > vp0( vBlPtJ_ [ jBl ].vEnt() [ jPt ].vpNeighbor0() );
829 vp0.insert(vp0.begin(), & vBlPtJ_ [ jBl ].vEnt() [ jPt ]);
830 const int &nbrNeighbor = vBlPtJ_ [ jBl ].vEnt() [ jPt ].vpNeighbor0().size();
832 for (
unsigned int iPt = 1; iPt < nbrNeighbor; ++iPt ) {
833 for (
unsigned int kPt = iPt + 1; kPt <= nbrNeighbor; ++kPt ) {
834 if ( std :: abs( eucDistance(* vp0 [ iPt ], * vp0 [ kPt ]) - inData_->dr() ) <= ( +
Constants :: TOLERANCE ) ) {
835 vBlEd_ [ jBl ].add(
Edge(vp0 [ iPt ], vp0 [ kPt ]) );
841 #if VERBOSE_LEVEL >= 2
842 std :: cout <<
"vBlEd_[jBl].size() = " << vBlEd_ [ jBl ].size() <<
"\n";
849 #if VERBOSE_LEVEL >= 2
850 std :: cout <<
"-- clean vBlEd_ : mark then remove duplicated edges from vBlEd_\n";
851 std :: cout <<
"---- mark duplicated edges in vBlEd_\n";
853 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
854 for (
unsigned int iEd1 = 0; iEd1 < vBlEd_ [ iBl ].size(); ++iEd1 ) {
855 for (
unsigned int iEd2 = ( iEd1 + 1 ); iEd2 < vBlEd_ [ iBl ].size(); ++iEd2 ) {
856 if ( superposed(vBlEd_ [ iBl ].vEnt() [ iEd1 ], vBlEd_ [ iBl ].vEnt() [ iEd2 ]) ) {
857 if ( !vBlEd_ [ iBl ].vEnt() [ iEd2 ].mark() ) {
858 vBlEd_ [ iBl ].vEnt() [ iEd2 ].mark() =
true;
865 #if VERBOSE_LEVEL >= 2
866 std :: cout <<
"---- remove duplicated edges from vBlEd_\n";
868 std :: vector< Edge > vec1;
869 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
871 for (
unsigned int iEd1 = 0; iEd1 < vBlEd_ [ iBl ].size(); ++iEd1 ) {
872 if ( !vBlEd_ [ iBl ].vEnt() [ iEd1 ].mark() ) {
873 vec1.push_back(vBlEd_ [ iBl ].vEnt() [ iEd1 ]);
877 vBlEd_ [ iBl ].vEnt().clear();
878 for (
unsigned int iEd1 = 0; iEd1 < vec1.size(); ++iEd1 ) {
879 vBlEd_ [ iBl ].vEnt().push_back(vec1 [ iEd1 ]);
882 #if VERBOSE_LEVEL >= 2
883 std :: cout <<
"vBlEd_[iBl].size() = " << vBlEd_ [ iBl ].size() <<
"\n";
890 #if VERBOSE_LEVEL >= 2
891 std :: cout <<
"-- fill vEd_ (vector of edge instance addresses) of each point\n";
893 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
894 for (
unsigned int iEd1 = 0; iEd1 < vBlEd_ [ iBl ].size(); ++iEd1 ) {
895 vBlEd_ [ iBl ].vEnt() [ iEd1 ].vPt() [ 0 ]->vEd().push_back(& vBlEd_ [ iBl ].vEnt() [ iEd1 ]);
896 vBlEd_ [ iBl ].vEnt() [ iEd1 ].vPt() [ 1 ]->vEd().push_back(& vBlEd_ [ iBl ].vEnt() [ iEd1 ]);
903 #if VERBOSE_LEVEL >= 2
904 std :: cout <<
"-- fill vBlQd_\n";
907 vBlQd_.resize( inData_->blockNumber() );
908 for (
unsigned int jBl1 = 0; jBl1 < inData_->blockNumber(); ++jBl1 ) {
909 vBlQd_ [ jBl1 ].clear();
910 for (
unsigned int jPt1 = 0; jPt1 < vBlPtJ_ [ jBl1 ].size(); ++jPt1 ) {
911 std :: vector< msbGrid :: Edge * > vEd1(
neighborsFromvBlEd_( jBl1, inData_->dr() / 2.0, & vBlPtJ_ [ jBl1 ].vEnt() [ jPt1 ] ) );
912 if ( vEd1.size() == 4 ) {
916 vBlQd_ [ jBl1 ].add(qd1);
920 #if VERBOSE_LEVEL >= 2
921 std :: cout <<
"vBlQd_[jBl1].size() = " << vBlQd_ [ jBl1 ].size() <<
"\n";
928 std :: vector< msbGrid :: Edge * > vEd1;
930 for (
unsigned int iEd1 = 0; iEd1 < vBlEd_ [ iBl0 ].size(); ++iEd1 ) {
932 vEd1.push_back(& vBlEd_ [ iBl0 ].vEnt() [ iEd1 ]);
935 if ( vEd1.size() == 4 ) {
945 #if VERBOSE_LEVEL >= 2
946 std :: cout <<
"-- filling vCel_ (vector of cell instance addresses) of each point\n";
948 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
955 #if VERBOSE_LEVEL >= 2
956 std :: cout <<
"-- filling vCel_ (vector of cell instance addresses) of each edge\n";
958 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
965 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
966 for (
unsigned int iPt = 0; iPt < vBlPtI_ [ iBl ].size(); ++iPt ) {
968 if ( vBlPtI_ [ iBl ].vEnt() [ iPt ].vCel().size() == 0 ) {
969 if ( !vBlPtI_ [ iBl ].vEnt() [ iPt ].mark() ) {
970 vBlPtI_ [ iBl ].vEnt() [ iPt ].mark() =
true;
971 #if ENABLE_MFILES_OUTPUT == 1
972 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().size += 4;
973 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().edgeColor =
Blue;
974 vBlPtI_ [ iBl ].vEnt() [ iPt ].marker().faceColor =
Green;
984 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl0 ].size(); ++iQd1 ) {
985 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vPt() [ 0 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
986 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vPt() [ 1 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
987 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vPt() [ 2 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
988 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vPt() [ 3 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
994 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl0 ].size(); ++iQd1 ) {
995 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vEd() [ 0 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
996 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vEd() [ 1 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
997 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vEd() [ 2 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
998 vBlQd_ [ iBl0 ].vEnt() [ iQd1 ].vEd() [ 3 ]->vCel().push_back( & ( vBlQd_ [ iBl0 ].vEnt() [ iQd1 ] ) );
1004 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1005 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl ].size(); ++iQd1 ) {
1006 int blBoundPtNumber = 0;
1007 for (
unsigned int iPt1 = 0; iPt1 < 4; ++iPt1 ) {
1008 if ( vBlQd_ [ iBl ].vEnt() [ iQd1 ].vPt() [ iPt1 ]->onBlockBoundary() ) {
1013 if ( blBoundPtNumber < 2 ) {
1017 vBlQd_ [ iBl ].vEnt() [ iQd1 ].onBlockBoundary() =
true;
1018 #if ENABLE_MFILES_OUTPUT == 1
1019 vBlQd_ [ iBl ].vEnt() [ iQd1 ].color() = color0;
1023 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl ].size(); ++iQd1 ) {
1024 if ( !vBlQd_ [ iBl ].vEnt() [ iQd1 ].onBlockBoundary() ) {
1028 for (
unsigned int iQd2 = 0; iQd2 < vBlQd_ [ iBl ].size(); ++iQd2 ) {
1029 if ( iQd2 == iQd1 ) {
1033 if ( !vBlQd_ [ iBl ].vEnt() [ iQd2 ].onBlockBoundary() ) {
1037 int commonBoundPtNumber = 0;
1038 for (
unsigned int iPt1 = 0; iPt1 < 4; ++iPt1 ) {
1039 if ( !vBlQd_ [ iBl ].vEnt() [ iQd1 ].vPt() [ iPt1 ]->onBlockBoundary() ) {
1043 for (
unsigned int iPt2 = 0; iPt2 < 4; ++iPt2 ) {
1044 if ( !vBlQd_ [ iBl ].vEnt() [ iQd2 ].vPt() [ iPt2 ]->onBlockBoundary() ) {
1048 if ( vBlQd_ [ iBl ].vEnt() [ iQd1 ].vPt() [ iPt1 ] == vBlQd_ [ iBl ].vEnt() [ iQd2 ].vPt() [ iPt2 ] ) {
1049 ++commonBoundPtNumber;
1054 if ( commonBoundPtNumber != 2 ) {
1058 int qd1BoundPtNumber = 0;
1059 for (
unsigned int iPt1 = 0; iPt1 < 4; ++iPt1 ) {
1060 if ( vBlQd_ [ iBl ].vEnt() [ iQd1 ].vPt() [ iPt1 ]->onBlockBoundary() ) {
1065 if ( qd1BoundPtNumber == 2 ) {
1066 vBlQd_ [ iBl ].vEnt() [ iQd1 ].onBlockBoundary() =
false;
1067 #if ENABLE_MFILES_OUTPUT == 1
1068 vBlQd_ [ iBl ].vEnt() [ iQd1 ].color() =
Black;
1072 int qd2BoundPtNumber = 0;
1073 for (
unsigned int iPt2 = 0; iPt2 < 4; ++iPt2 ) {
1074 if ( vBlQd_ [ iBl ].vEnt() [ iQd2 ].vPt() [ iPt2 ]->onBlockBoundary() ) {
1079 if ( qd2BoundPtNumber == 2 ) {
1080 vBlQd_ [ iBl ].vEnt() [ iQd2 ].onBlockBoundary() =
false;
1081 #if ENABLE_MFILES_OUTPUT == 1
1082 vBlQd_ [ iBl ].vEnt() [ iQd2 ].color() =
Black;
1088 vvBoundQdPtr_.clear();
1089 vvBoundQdPtr_.resize( inData_->blockNumber() );
1090 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl ].size(); ++iQd1 ) {
1091 if ( vBlQd_ [ iBl ].vEnt() [ iQd1 ].onBlockBoundary() ) {
1092 vvBoundQdPtr_ [ iBl ].push_back(& vBlQd_ [ iBl ].vEnt() [ iQd1 ]);
1096 #if VERBOSE_LEVEL >= 2
1097 std :: cout <<
"vvBoundQdPtr_[iBl].size() = " << vvBoundQdPtr_ [ iBl ].size() <<
"\n";
1104 for (
unsigned int iBl1 = 0; iBl1 < inData_->blockNumber(); ++iBl1 ) {
1105 for (
unsigned int iEd1 = 0; iEd1 < vBlEd_ [ iBl1 ].size(); ++iEd1 ) {
1106 if ( vBlEd_ [ iBl1 ].vEnt() [ iEd1 ].vPt() [ 0 ]->onBlockBoundary() &&
1107 vBlEd_ [ iBl1 ].vEnt() [ iEd1 ].vPt() [ 1 ]->onBlockBoundary() ) {
1108 if ( !vBlEd_ [ iBl1 ].vEnt() [ iEd1 ].onBlockBoundary() ) {
1109 vBlEd_ [ iBl1 ].vEnt() [ iEd1 ].onBlockBoundary() =
true;
1110 #if ENABLE_MFILES_OUTPUT == 1
1111 vBlEd_ [ iBl1 ].vEnt() [ iEd1 ].color() = color0;
1118 for (
unsigned int iBl1 = 0; iBl1 < inData_->blockNumber(); ++iBl1 ) {
1119 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl1 ].size(); ++iQd1 ) {
1120 if ( !vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].onBlockBoundary() ) {
1124 for (
unsigned int iQd2 = 0; iQd2 < vBlQd_ [ iBl1 ].size(); ++iQd2 ) {
1125 if ( iQd2 == iQd1 ) {
1129 for (
unsigned int iEd1 = 0; iEd1 < 4; ++iEd1 ) {
1130 if ( !vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->onBlockBoundary() ) {
1134 for (
unsigned int iEd2 = 0; iEd2 < 4; ++iEd2 ) {
1135 if ( !vBlQd_ [ iBl1 ].vEnt() [ iQd2 ].vEd() [ iEd2 ]->onBlockBoundary() ) {
1139 if ( vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ] == vBlQd_ [ iBl1 ].vEnt() [ iQd2 ].vEd() [ iEd2 ] ) {
1140 vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->onBlockBoundary() =
false;
1141 #if ENABLE_MFILES_OUTPUT == 1
1142 vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->color() =
Black;
1154 #if VERBOSE_LEVEL >= 2
1155 std :: cout <<
"-- fill block boundary : vvBlBoundEdPtr_\n";
1158 vvBlBoundEdPtr_.clear();
1159 vvBlBoundEdPtr_.resize( inData_->blockNumber() );
1161 for (
unsigned int iBl1 = 0; iBl1 < inData_->blockNumber(); ++iBl1 ) {
1162 vvBlBoundEdPtr_ [ iBl1 ].clear();
1163 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl1 ].size(); ++iQd1 ) {
1164 if ( !vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].onBlockBoundary() ) {
1168 short int onBlockBoundEdNumber = 0;
1169 for (
unsigned int iEd1 = 0; iEd1 < 4; ++iEd1 ) {
1170 if ( vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->onBlockBoundary() ) {
1171 ++onBlockBoundEdNumber;
1175 if ( onBlockBoundEdNumber != 4 ) {
1176 for (
unsigned int iEd1 = 0; iEd1 < 4; ++iEd1 ) {
1177 if ( vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->onBlockBoundary() ) {
1178 vvBlBoundEdPtr_ [ iBl1 ].push_back(vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]);
1183 if ( onBlockBoundEdNumber == 4 ) {
1184 for (
unsigned int iEd1 = 0; iEd1 < 4; ++iEd1 ) {
1185 vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->mark() =
true;
1188 for (
unsigned int iPt1 = 0; iPt1 < 4; ++iPt1 ) {
1189 if ( vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vPt() [ iPt1 ]->vCel().size() == 1 ) {
1190 vBlQd_ [ iBl1 ].vEnt() [ iQd1 ].vPt() [ iPt1 ]->mark() =
true;
1196 #if VERBOSE_LEVEL >= 2
1197 std :: cout <<
"vvBlBoundEdPtr_[iBl1].size() = " << vvBlBoundEdPtr_ [ iBl1 ].size() <<
"\n";
1204 for (
unsigned int iBl1 = 0; iBl1 < inData_->blockNumber(); ++iBl1 ) {
1205 vvBlBoundEdPtr_ [ iBl1 ].clear();
1206 for (
unsigned int iEd1 = 0; iEd1 < vBlEd_ [ iBl1 ].size(); ++iEd1 ) {
1207 if ( vBlEd_ [ iBl1 ].vEnt() [ iEd1 ].onBlockBoundary() ) {
1208 vvBlBoundEdPtr_ [ iBl1 ].push_back(& vBlEd_ [ iBl1 ].vEnt() [ iEd1 ]);
1212 #if VERBOSE_LEVEL >= 2
1213 std :: cout <<
"vvBlBoundEdPtr_[iBl1].size() = " << vvBlBoundEdPtr_ [ iBl1 ].size() <<
"\n";
1222 for (
unsigned int iBl1 = 0; iBl1 < inData_->blockNumber(); ++iBl1 ) {
1223 for (
unsigned int iPt1 = 0; iPt1 < vBlPtI_ [ iBl1 ].size(); ++iPt1 ) {
1224 if ( !vBlPtI_ [ iBl1 ].vEnt() [ iPt1 ].onBlockBoundary() ) {
1228 short int onBlockBoundEdNumber = 0;
1229 for (
unsigned int iEd1 = 0; iEd1 < vBlPtI_ [ iBl1 ].vEnt() [ iPt1 ].vEd().size(); ++iEd1 ) {
1230 if ( vBlPtI_ [ iBl1 ].vEnt() [ iPt1 ].vEd() [ iEd1 ]->onBlockBoundary() ) {
1231 ++onBlockBoundEdNumber;
1235 if ( onBlockBoundEdNumber == 0 ) {
1236 vBlPtI_ [ iBl1 ].vEnt() [ iPt1 ].onBlockBoundary() =
false;
1237 #if ENABLE_MFILES_OUTPUT == 1
1238 vBlPtI_ [ iBl1 ].vEnt() [ iPt1 ].marker().size -= 4;
1239 vBlPtI_ [ iBl1 ].vEnt() [ iPt1 ].marker().edgeColor =
Black;
1240 vBlPtI_ [ iBl1 ].vEnt() [ iPt1 ].marker().faceColor =
Red;
1251 vvBoundPtPtr_.clear();
1252 vvBoundPtPtr_.resize( inData_->blockNumber() );
1253 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1254 for (
unsigned int iPt = 0; iPt < vBlPtI_ [ iBl ].size(); ++iPt ) {
1255 if ( vBlPtI_ [ iBl ].vEnt() [ iPt ].onBlockBoundary() ) {
1256 vvBoundPtPtr_ [ iBl ].push_back(& vBlPtI_ [ iBl ].vEnt() [ iPt ]);
1264 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1265 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl ].size(); ++iQd1 ) {
1266 short int onBlockBoundEdNumber = 0;
1267 for (
unsigned int iEd1 = 0; iEd1 < 4; ++iEd1 ) {
1268 if ( vBlQd_ [ iBl ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->onBlockBoundary() ) {
1269 ++onBlockBoundEdNumber;
1273 if ( onBlockBoundEdNumber == 0 ) {
1274 vBlQd_ [ iBl ].vEnt() [ iQd1 ].onBlockBoundary() =
false;
1275 #if ENABLE_MFILES_OUTPUT == 1
1276 vBlQd_ [ iBl ].vEnt() [ iQd1 ].color() = color0;
1285 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1286 if ( vBlQd_ [ iBl ].size() == 0 ) {
1287 std :: cerr <<
"warning : block number " << iBl <<
" is empty!!\n";
1291 if ( vBlQd_ [ iBl ].size() == 1 ) {
1292 std :: cerr <<
"warning : block number " << iBl <<
" has only one cell!!\n";
1296 for (
unsigned int iQd1 = 0; iQd1 < vBlQd_ [ iBl ].size(); ++iQd1 ) {
1297 if ( !vBlQd_ [ iBl ].vEnt() [ iQd1 ].onBlockBoundary() ) {
1301 bool isolatedCell =
true;
1302 for (
unsigned int iEd1 = 0; iEd1 < 4; ++iEd1 ) {
1303 if ( vBlQd_ [ iBl ].vEnt() [ iQd1 ].vEd() [ iEd1 ]->vCel().size() != 1 ) {
1304 isolatedCell =
false;
1309 if ( isolatedCell ) {
1310 std :: cerr <<
"isolated cell in block number " << iBl <<
"\n";
1311 if ( !vBlQd_ [ iBl ].vEnt() [ iQd1 ].mark() ) {
1312 vBlQd_ [ iBl ].vEnt() [ iQd1 ].mark() =
true;
1313 #if ENABLE_MFILES_OUTPUT == 1
1314 vBlQd_ [ iBl ].vEnt() [ iQd1 ].color() = color0;
1324 #if VERBOSE_LEVEL >= 2
1325 std :: cout <<
"-- set identifiers\n";
1326 std :: cout <<
"---- Points identification : blPtExtBound_, vBlPtI_ and vBlPtJ_\n";
1329 idPt1 = blPtExtBound_.putId(idPt1);
1330 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1331 vBlPtI_ [ iBl ].Id() = iBl + 1;
1332 idPt1 = vBlPtI_ [ iBl ].putId(idPt1);
1335 #if VERBOSE_LEVEL >= 1
1336 std :: cout <<
"totPtNumber_ = " << ( idPt1 - 1 ) <<
"\n";
1339 #if VERBOSE_LEVEL >= 2
1340 std :: cout <<
"---- Edges identification : blEdExtBound_ and vBlEd_\n";
1343 idEd1 = blEdExtBound_.putId(idEd1);
1344 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1345 vBlEd_ [ iBl ].Id() = iBl + 1;
1346 idEd1 = vBlEd_ [ iBl ].putId(idEd1);
1349 #if VERBOSE_LEVEL >= 1
1350 std :: cout <<
"totEdNumber_ = " << ( idEd1 - 1 ) <<
"\n";
1353 #if VERBOSE_LEVEL >= 2
1354 std :: cout <<
"---- Quadrangles identification : vBlQd_\n";
1357 const int firstQdId = inData_->blockNumber() + 1 + 2 ;
1358 int long idQd1 = firstQdId;
1359 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1360 vBlQd_ [ iBl ].Id() = iBl + 1;
1361 idQd1 = vBlQd_ [ iBl ].putId(idQd1);
1366 #if VERBOSE_LEVEL >= 1
1367 std :: cout <<
"totQdNumber_ = " << totQdNumber_ <<
"\n";
1373 #if OUTPUT_MFILES_DIR_CREATED != 1
1374 const std :: string createDirectoryCommandString =
"mkdir -p " + inData_->outputPath() +
"m/" +
outputDirName_;
1375 char *createDirectoryCommandChar = (
char * ) createDirectoryCommandString.c_str();
1376 system(createDirectoryCommandChar);
1379 std :: cout <<
"-- write *.m output files\n";
1382 mwvBlPtI_(inData_), mwvBlPtJ_(inData_), mwblPtExtBound_(inData_),
1383 mwvvBoundPtPtr_(inData_), mwvvBlBoundEdPtr_(inData_);
1384 MFilesWriter mwvvBoundQdPtr_(inData_), mwvBlQd_(inData_);
1387 mwAllEntities.openFile(outputDirName_ +
"/allEntities");
1388 mwvBlPtI_.openFile(outputDirName_ +
"/vBlPtI_");
1389 mwvBlPtJ_.openFile(outputDirName_ +
"/vBlPtJ_");
1390 mwblPtExtBound_.openFile(outputDirName_ +
"/blPtExtBound_");
1391 mwvvBoundPtPtr_.openFile(outputDirName_ +
"/vvBoundPtPtr_");
1392 mwvvBlBoundEdPtr_.
openFile(outputDirName_ +
"/vvBlBoundEdPtr_");
1394 mwvvBoundQdPtr_.openFile(outputDirName_ +
"/vvBoundQdPtr_");
1395 mwvBlQd_.
openFile(outputDirName_ +
"/vBlQd_");
1398 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1399 vBlPtI_ [ iBl ].putMarkerSymbol(
"'o'");
1400 mwvBlPtI_.write(vBlPtI_ [ iBl ],
false);
1401 mwAllEntities.write(vBlPtI_ [ iBl ],
false);
1403 vBlPtJ_ [ iBl ].putMarkerSymbol(
"'s'");
1404 mwvBlPtJ_.write(vBlPtJ_ [ iBl ],
false);
1405 mwAllEntities.write(vBlPtJ_ [ iBl ],
false);
1408 blPtExtBound_.putMarkerSymbol(
"'o'");
1409 mwblPtExtBound_.write(blPtExtBound_,
false);
1410 mwAllEntities.write(blPtExtBound_,
false);
1411 mwvBlPtI_.closeFile();
1412 mwvBlPtJ_.closeFile();
1413 mwblPtExtBound_.closeFile();
1416 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1417 mwvBlQd_.
write(vBlQd_ [ iBl ],
false);
1418 mwAllEntities.write(vBlQd_ [ iBl ],
false);
1422 mwAllEntities.closeFile();
1425 for (
unsigned int iBl = 0; iBl < vvBoundPtPtr_.size(); ++iBl ) {
1426 for (
unsigned int i = 0; i < vvBoundPtPtr_ [ iBl ].size(); ++i ) {
1427 mwvvBoundPtPtr_.write(* vvBoundPtPtr_ [ iBl ] [ i ],
true);
1431 mwvvBoundPtPtr_.closeFile();
1434 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1435 mwvvBlBoundEdPtr_.
write(vBlPtI_ [ iBl ],
false);
1438 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1439 mwvvBlBoundEdPtr_.
write(vBlPtJ_ [ iBl ],
false);
1443 for (
unsigned int iBl = 0; iBl < ( inData_->blockNumber() - 1 ); ++iBl ) {
1444 for (
unsigned int i = 0; i < vvBlBoundEdPtr_ [ iBl ].size(); ++i ) {
1445 mwvvBlBoundEdPtr_.
write(* vvBlBoundEdPtr_ [ iBl ] [ i ],
false);
1452 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1453 mwvvBoundQdPtr_.write(vBlPtI_ [ iBl ],
false);
1456 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1457 mwvvBoundQdPtr_.write(vBlPtJ_ [ iBl ],
false);
1461 for (
unsigned int iBl = 0; iBl < vvBoundQdPtr_.size(); ++iBl ) {
1462 for (
unsigned int i = 0; i < vvBoundQdPtr_ [ iBl ].size(); ++i ) {
1463 mwvvBoundQdPtr_.write(* vvBoundQdPtr_ [ iBl ] [ i ],
false);
1467 mwvvBoundQdPtr_.closeFile();
1472 const std :: string createDirectoryCommandString =
"mkdir -p " + inData_->outputPath() +
"geo/" +
outputDirName_;
1473 char *createDirectoryCommandChar = (
char * ) createDirectoryCommandString.c_str();
1474 system(createDirectoryCommandChar);
1475 #define OUTPUT_GEOFILES_DIR_CREATED 1
1477 #if WRITE_MSBGRID_GEOFILES == 1
1482 #if WRITE_FULLY_UNSTRUCTURED_GEOFILE == 1
1490 #if VERBOSE_LEVEL >= 1
1491 std :: cout <<
"-- write msbGrid \"*.geo\" files\n";
1499 gwblPtExtBound_.openFile(outputDirName_ +
"/blPtExtBound_");
1500 gwvBlPtI_.
openFile(outputDirName_ +
"/vBlPtI_");
1501 gwvEdExtBound_.openFile(outputDirName_ +
"/vEdExtBound_");
1502 gwvBlEd_.
openFile(outputDirName_ +
"/vBlEd_");
1503 gwvBlQd_.
openFile(outputDirName_ +
"/vBlQd_");
1504 gwBlockBoundary.
openFile(outputDirName_ +
"/blockBoundary_");
1506 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1507 gwvBlPtI_.
write(vBlPtI_ [ iBl ]);
1508 gwvBlEd_.
write(vBlEd_ [ iBl ]);
1509 gwvBlQd_.
write(vBlQd_ [ iBl ],
true);
1512 std :: string firstSurfaceIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << vBlQd_.front().vEnt().front().Id() ) )->str();
1513 std :: string lastSurfaceIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << vBlQd_.back().vEnt().back().Id() ) )->str();
1514 gwvBlQd_.
write(
"\nColor White {Surface {" + firstSurfaceIdString +
":" + lastSurfaceIdString +
"};}\n");
1516 gwvEdExtBound_.write(
"\n//////////////////////////////\n");
1517 gwvEdExtBound_.write(
"// external boundary lines //\n");
1518 gwvEdExtBound_.write(
"//////////////////////////////\n");
1519 for (
unsigned int iEd = 0; iEd < vEdExtBound_.size(); ++iEd ) {
1520 gwvEdExtBound_.write(* vEdExtBound_ [ iEd ]);
1523 gwblPtExtBound_.write(
"\n//////////////////////////////\n");
1524 gwblPtExtBound_.write(
"// external boundary points //\n");
1525 gwblPtExtBound_.write(
"//////////////////////////////\n");
1526 blPtExtBound_.putCl( inData_->dr() );
1527 gwblPtExtBound_.write(blPtExtBound_);
1529 gwBlockBoundary.
write(
"\n///////////////////////\n");
1530 gwBlockBoundary.
write(
"// block line Loops //\n");
1531 gwBlockBoundary.
write(
"///////////////////////\n");
1532 const int blockBoundaryIdMin = vBlQd_.back().vEnt().back().Id() + 1;
1533 int blockBoundaryId = blockBoundaryIdMin;
1534 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1535 std :: string blockIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << vBlQd_ [ iBl ].Id() ) )->str();
1536 std :: string blockBoundaryIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << blockBoundaryId ) )->str();
1537 gwBlockBoundary.
write(
"\n/// Boundary of Block " + blockIdString +
", Line Loop " + blockBoundaryIdString +
"\n");
1538 gwBlockBoundary.
writeLineLoop(vvBlBoundEdPtr_ [ iBl ], blockBoundaryId);
1542 const int blockBoundaryIdMax = blockBoundaryId - 1;
1544 gwBlockBoundary.
write(
"\n//////////////////////////////////\n");
1545 gwBlockBoundary.
write(
"// external boundary line Loop //\n");
1546 gwBlockBoundary.
write(
"//////////////////////////////////\n");
1547 const int extBoundaryId = 1;
1548 std :: string extBoundaryIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << extBoundaryId ) )->str();
1549 gwBlockBoundary.
write(
"\n/// Line Loop " + extBoundaryIdString +
"\n");
1552 gwBlockBoundary.
write(
"\n/////////////////////////////////\n");
1553 gwBlockBoundary.
write(
"// inter-blocks plane surface //\n");
1554 gwBlockBoundary.
write(
"/////////////////////////////////\n");
1555 const int ig_Physical_Id = vBlQd_.back().Id() + 1;
1556 const int ig_Plane_Id = vBlQd_.back().vEnt().back().Id() + 1;
1557 std :: string ig_Physical_IdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ig_Physical_Id ) )->str();
1558 std :: string ig_Plane_IdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ig_Plane_Id ) )->str();
1559 std :: string blockBoundaryIdMinString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << blockBoundaryIdMin ) )->str();
1560 std :: string blockBoundaryIdMaxString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << blockBoundaryIdMax ) )->str();
1561 gwBlockBoundary.
write(
"Plane Surface(" + ig_Plane_IdString +
") = {" + extBoundaryIdString +
"," + blockBoundaryIdMinString +
":" + blockBoundaryIdMaxString +
"};\n");
1562 gwBlockBoundary.
write(
"Physical Surface(" + ig_Physical_IdString +
") = {" + ig_Plane_IdString +
"};\n");
1563 gwBlockBoundary.
write(
"\nColor Red {Surface {" + ig_Plane_IdString +
"};}\n");
1567 gwvEdExtBound_.closeFile();
1568 gwblPtExtBound_.closeFile();
1573 const std :: string msbGridGeoFileName = outputDirName_ +
"/msbGrid_" +
outputDirName_;
1574 gwmsbGrid_.
openFile(msbGridGeoFileName);
1576 std :: string drString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->dr() ) )->str();
1577 std :: string xminString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->xMin() ) )->str();
1578 std :: string xmaxString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->xMax() ) )->str();
1579 std :: string yminString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->yMin( inData_->xMin() ) ) )->str();
1580 std :: string ymaxString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->yMax( inData_->xMax() ) ) )->str();
1581 std :: string zString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << 0. ) )->str();
1582 std :: string blockNumberString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->blockNumber() ) )->str();
1583 std :: string ehmCString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << 4. ) )->str();
1585 gwmsbGrid_.
write(
"dr = " + drString +
";\n");
1586 gwmsbGrid_.
write(
"xmin = " + xminString +
";\n");
1587 gwmsbGrid_.
write(
"xmax = " + xmaxString +
";\n");
1588 gwmsbGrid_.
write(
"ymin = " + yminString +
";\n");
1589 gwmsbGrid_.
write(
"ymax = " + ymaxString +
";\n");
1590 gwmsbGrid_.
write(
"z = " + zString +
";\n");
1591 gwmsbGrid_.
write(
"blocks_number = " + blockNumberString +
";\n");
1592 gwmsbGrid_.
write(
"ehm_c = " + ehmCString +
";\n\n");
1594 gwmsbGrid_.
write(
"Include \"" + gwmsbGrid_.
geoFile(
"blPtExtBound_") +
"\";\n");
1595 gwmsbGrid_.
write(
"Include \"" + gwmsbGrid_.
geoFile(
"vBlPtI_") +
"\";\n");
1597 gwmsbGrid_.
write(
"Include \"" + gwmsbGrid_.
geoFile(
"vEdExtBound_") +
"\";\n");
1598 gwmsbGrid_.
write(
"Include \"" + gwmsbGrid_.
geoFile(
"vBlEd_") +
"\";\n");
1600 gwmsbGrid_.
write(
"Include \"" + gwmsbGrid_.
geoFile(
"vBlQd_") +
"\";\n");
1602 gwmsbGrid_.
write(
"Include \"" + gwmsbGrid_.
geoFile(
"blockBoundary_") +
"\";\n");
1603 #if ADD_RECOMBINEALL == 1
1604 gwmsbGrid_.
write(
"\nInclude \"../../../ehm.geo\";\n");
1605 gwmsbGrid_.
write(
"\nMesh.RecombineAll = 1;\n");
1612 #if VERBOSE_LEVEL >= 1
1613 std :: cout <<
"-- write fullyUnstructured.geo\n";
1616 const std :: string fullyUnstructuredGeoFileName = outputDirName_ +
"/fullyUnstructured_" +
outputDirName_;
1617 fullyUnstructured.
openFile(fullyUnstructuredGeoFileName);
1618 const std :: string cl0(
newCl(
"cl0", ( inData_->dr() / inData_->rafCoeff() ) ) );
1619 fullyUnstructured.
write(cl0);
1620 fullyUnstructured.
write(
"//////////////////\n");
1621 fullyUnstructured.
write(
"// block points //\n");
1622 fullyUnstructured.
write(
"//////////////////\n");
1623 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1624 std :: string blockIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ( iBl + 1 ) ) )->str();
1625 fullyUnstructured.
write(
"\n/// Block " + blockIdString +
"\n");
1626 for (
unsigned int i = 0; i < vvBoundPtPtr_ [ iBl ].size(); ++i ) {
1627 fullyUnstructured.
write(* vvBoundPtPtr_ [ iBl ] [ i ],
"cl0");
1631 fullyUnstructured.
write(
"\n//////////////////////////////\n");
1632 fullyUnstructured.
write(
"// external boundary points //\n");
1633 fullyUnstructured.
write(
"//////////////////////////////\n");
1634 fullyUnstructured.
write(blPtExtBound_,
"cl0");
1636 fullyUnstructured.
write(
"\n//////////////////\n");
1637 fullyUnstructured.
write(
"// block lines //\n");
1638 fullyUnstructured.
write(
"//////////////////\n");
1640 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1641 std :: string blockIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ( iBl + 1 ) ) )->str();
1642 fullyUnstructured.
write(
"\n/// Block " + blockIdString +
"\n");
1643 for (
unsigned int i = 0; i < vvBlBoundEdPtr_ [ iBl ].size(); ++i ) {
1644 fullyUnstructured.
write(* vvBlBoundEdPtr_ [ iBl ] [ i ]);
1648 fullyUnstructured.
write(
"\n//////////////////////////////\n");
1649 fullyUnstructured.
write(
"// external boundary lines //\n");
1650 fullyUnstructured.
write(
"//////////////////////////////\n");
1652 for (
unsigned int iEd = 0; iEd < vEdExtBound_.size(); ++iEd ) {
1653 fullyUnstructured.
write(* vEdExtBound_ [ iEd ]);
1656 fullyUnstructured.
write(
"\n///////////////////////\n");
1657 fullyUnstructured.
write(
"// block line Loops //\n");
1658 fullyUnstructured.
write(
"///////////////////////\n");
1660 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1661 std :: string blockIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ( iBl + 1 ) ) )->str();
1662 fullyUnstructured.
write(
"\n/// Block " + blockIdString +
"\n");
1663 fullyUnstructured.
writeLineLoop(vvBlBoundEdPtr_ [ iBl ], iBl + 1);
1666 fullyUnstructured.
write(
"\n//////////////////////////////////\n");
1667 fullyUnstructured.
write(
"// external boundary line Loop //\n");
1668 fullyUnstructured.
write(
"//////////////////////////////////\n");
1669 fullyUnstructured.
writeLineLoop(vEdExtBound_, inData_->blockNumber() + 1);
1671 fullyUnstructured.
write(
"\n///////////////////////////\n");
1672 fullyUnstructured.
write(
"// block plane surfaces //\n");
1673 fullyUnstructured.
write(
"///////////////////////////\n");
1674 const std :: string cl1(
newCl(
"cl1", ( inData_->dr() / inData_->rafCoeff() ) ) );
1675 fullyUnstructured.
write(cl1);
1677 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1678 if ( vvBoundPtPtr_ [ iBl ].size() < 1 ) {
1682 Point blockBarycenter;
1683 for (
unsigned int iPt1 = 0; iPt1 < vvBoundPtPtr_ [ iBl ].size(); ++iPt1 ) {
1684 blockBarycenter.
x() [ 0 ] += vvBoundPtPtr_ [ iBl ] [ iPt1 ]->x() [ 0 ];
1685 blockBarycenter.
x() [ 1 ] += vvBoundPtPtr_ [ iBl ] [ iPt1 ]->x() [ 1 ];
1688 blockBarycenter.
x() [ 0 ] /= vvBoundPtPtr_ [ iBl ].size();
1689 blockBarycenter.
x() [ 1 ] /= vvBoundPtPtr_ [ iBl ].size();
1691 std :: string blockIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ( iBl + 1 ) ) )->str();
1692 std :: stringstream newPoint;
1693 newPoint <<
"p" + blockIdString +
" = newp; Point(p" + blockIdString +
") = {" << +blockBarycenter.
x() [ 0 ] <<
", " << blockBarycenter.
x() [ 1 ] <<
", " <<
Scalar(0.0) <<
", cl1};\n";
1694 fullyUnstructured.
write( newPoint.str() );
1696 std :: stringstream ss;
1697 ss <<
"Plane Surface(" << blockIdString <<
") = {" << blockIdString <<
"};\n";
1699 ss <<
"Point{" <<
"p" + blockIdString <<
"} In Surface{" << blockIdString <<
"};\n";
1703 fullyUnstructured.
write( ss.str() );
1706 std :: string firstSurfaceIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << 1 ) )->str();
1707 std :: string lastSurfaceIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << inData_->blockNumber() ) )->str();
1708 fullyUnstructured.
write(
"\nPhysical Surface(1) = {" + firstSurfaceIdString +
":" + lastSurfaceIdString +
"};\n");
1709 fullyUnstructured.
write(
"\nColor White {Surface {" + firstSurfaceIdString +
":" + lastSurfaceIdString +
"};}\n");
1711 fullyUnstructured.
write(
"/////////////////////////////////\n");
1712 fullyUnstructured.
write(
"// inter-blocks plane surface //\n");
1713 fullyUnstructured.
write(
"/////////////////////////////////\n");
1714 const int extBoundaryId = inData_->blockNumber() + 1;
1715 std :: string extBoundaryIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << extBoundaryId ) )->str();
1716 std :: stringstream ss;
1717 ss <<
"Plane Surface(" << extBoundaryId <<
") = {";
1718 fullyUnstructured.
write( ss.str() );
1719 for (
unsigned int iBl = 0; iBl < inData_->blockNumber(); ++iBl ) {
1720 std :: string blockIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ( iBl + 1 ) ) )->str();
1721 fullyUnstructured.
write(blockIdString);
1722 fullyUnstructured.
write(
",");
1725 std :: string blockIdString =
static_cast< std :: ostringstream *
>( & ( std :: ostringstream() << ( inData_->blockNumber() + 1 ) ) )->str();
1726 fullyUnstructured.
write(blockIdString);
1727 fullyUnstructured.
write(
"};\n");
1729 std :: stringstream ss0;
1730 ss0 <<
"Physical Surface(" << blockIdString <<
") = {" << blockIdString <<
"};\n";
1731 ss0 <<
"Color Red {Surface {" + blockIdString +
"};}\n\n";
1732 fullyUnstructured.
write( ss0.str() );
1733 #if ADD_RECOMBINEALL == 1
1734 fullyUnstructured.
write(
"\nMesh.RecombineAll = 1;\n");
1737 fullyUnstructured.
write(
"// ## END OF FILE ##\n");
1744 std :: stringstream scl;
1745 scl <<
"\n// Characteristic length, " << clName << std :: endl;
1746 scl << std :: setw(1) << std :: fixed << clName <<
" = " << clValue <<
";\n\n";