diff --git a/Fltk/partitionDialog.cpp b/Fltk/partitionDialog.cpp index d88a7de24dde2c7f6c244668cd47341c9e021961..08ee3c964bebbcaf85108691e711d900975dcda0 100644 --- a/Fltk/partitionDialog.cpp +++ b/Fltk/partitionDialog.cpp @@ -36,6 +36,7 @@ void partition_opt_chaco_globalalg_cb(Fl_Widget *widget, void *data); void partition_opt_architecture_cb(Fl_Widget *widget, void *data); void partition_opt_num_partitions_cb(Fl_Widget *widget, void *data); void partition_opt_spectralcheck_cb(Fl_Widget *widget, void *data); +void partition_opt_booleans_cb(Fl_Widget *widget, void *data); void partition_select_groups_cb(Fl_Widget *widget, void *data); // Pointers to required widgets @@ -45,6 +46,10 @@ struct PartitionDialog // Group 0 Fl_Choice *choicePartitioner; Fl_Value_Input *inputNumPartition; + Fl_Check_Button *setPartitionEntities; + Fl_Check_Button *setGhostCells; + Fl_Check_Button *setPartitionBoundaries; + Fl_Check_Button *setTopologyFile; // Group 1 Fl_Choice *choiceChacoAlg; Fl_Toggle_Button *toggleButtonAdvChaco; @@ -83,6 +88,10 @@ struct PartitionDialog CTX::instance()->partitionOptions.partitioner = choicePartitioner->value() + 1; CTX::instance()->partitionOptions.num_partitions = static_cast<int>(inputNumPartition->value()); + CTX::instance()->partitionOptions.createPartitionEntities = setPartitionEntities->value(); + CTX::instance()->partitionOptions.createGhostCells = setGhostCells->value(); + CTX::instance()->partitionOptions.createPartitionBoundaries = setPartitionBoundaries->value(); + CTX::instance()->partitionOptions.createTopologyFile = setTopologyFile->value(); // Group 1 CTX::instance()->partitionOptions.global_method = choiceChacoAlg->value() + 1; @@ -137,6 +146,10 @@ struct PartitionDialog // Group 0 choicePartitioner->value(CTX::instance()->partitionOptions.partitioner - 1); inputNumPartition->value(CTX::instance()->partitionOptions.num_partitions); + setPartitionEntities->value(CTX::instance()->partitionOptions.createPartitionEntities); + setGhostCells->value(CTX::instance()->partitionOptions.createGhostCells); + setPartitionBoundaries->value(CTX::instance()->partitionOptions.createPartitionBoundaries); + setTopologyFile->value(CTX::instance()->partitionOptions.createTopologyFile); // Group 1 choiceChacoAlg->value(CTX::instance()->partitionOptions.global_method - 1); @@ -323,6 +336,25 @@ void partition_opt_spectralcheck_cb(Fl_Widget *widget, void *data) } } +// Option considerations for the booleans +void partition_opt_booleans_cb(Fl_Widget *widget, void *data) +{ + PartitionDialog *dlg = static_cast<PartitionDialog*>(data); + if(dlg->setTopologyFile->value() == 1) + { + dlg->setPartitionEntities->value(1); + dlg->setPartitionEntities->deactivate(); + dlg->setPartitionBoundaries->value(1); + dlg->setPartitionBoundaries->deactivate(); + } + else + { + dlg->setPartitionEntities->activate(); + dlg->setPartitionBoundaries->activate(); + } +} + + void partition_defaults_cb(Fl_Widget *widget, void *data) { PartitionDialog *dlg = static_cast<PartitionDialog*>(data); @@ -485,7 +517,7 @@ void partition_dialog() {0} }; - const int h = 6 * WB + 3 * BH + 4; // This will be resized based on groups + const int h = 8 * WB + 5 * BH + 4; // This will be resized based on groups // that are displayed const int w = 3 * BB + IW + 3 * WB; // Window width int y = 0; @@ -497,7 +529,7 @@ void partition_dialog() // Main options group [0] { - const int GH = BH + 2 + 3*WB; + const int GH = 3*BH + 2 + 5*WB; y += WB; Fl_Group *g = new Fl_Group(0, y, w, GH); // Partitioner @@ -526,6 +558,29 @@ void partition_dialog() o->align(FL_ALIGN_RIGHT); } y += BH + WB; + // Booleans options + { + Fl_Check_Button *const o = new Fl_Check_Button (WB, y, 2*BB, BH, "Create partition entities"); + dlg.setPartitionEntities = o; + o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg); + } + { + Fl_Check_Button *const o = new Fl_Check_Button (2*WB + 2*BB, y, 2*BB, BH, "Create ghost cells"); + dlg.setGhostCells = o; + o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg); + } + y += BH + WB; + { + Fl_Check_Button *const o = new Fl_Check_Button (WB, y, 2*BB, BH, "Create partition boundaries"); + dlg.setPartitionBoundaries = o; + o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg); + } + { + Fl_Check_Button *const o = new Fl_Check_Button (2*WB + 2*BB, y, 2*BB, BH, "Create a totpology file"); + dlg.setTopologyFile = o; + o->callback((Fl_Callback *)partition_opt_booleans_cb, &dlg); + } + y += BH + WB; // Box (line) { Fl_Box* o = new Fl_Box(WB, y, w - 2*WB, 2); o->box(FL_ENGRAVED_FRAME); diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 743ab8e73194dddb430d4fa89d5b7172030f4a1c..5896ad44a8abf5c7aaa445f4eb3acdef948cb723 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -4081,10 +4081,10 @@ void GModel::classifyFaces(std::set<GFace*> &_faces) #endif } -void GModel::createPartitionBoundaries(int createGhostCells, int createAllDims) +void GModel::createPartitionBoundaries(int createGhostCells) { #if (defined(HAVE_CHACO) || defined(HAVE_METIS)) && defined(HAVE_MESH) - CreatePartitionBoundaries(this, createGhostCells, createAllDims); + CreatePartitionBoundaries(this, createGhostCells); #endif } diff --git a/Geo/GModel.h b/Geo/GModel.h index e292adf43f030b3fc9c63415c21ad805693b6038..249f753a8b8e070e7478be40431055a886ed429c 100644 --- a/Geo/GModel.h +++ b/Geo/GModel.h @@ -478,7 +478,7 @@ class GModel { int partitionMesh(int num); // create partition boundaries - void createPartitionBoundaries(int createGhostCells, int createAllDims = 0); + void createPartitionBoundaries(int createGhostCells); // fill the vertex arrays, given the current option and data bool fillVertexArrays(); diff --git a/Mesh/meshPartition.cpp b/Mesh/meshPartition.cpp index 033a1bb85a4a540486efa85cc47792f30a527088..8cc7c78e227990cc88fe3176a83bc8bc90dc4394 100644 --- a/Mesh/meshPartition.cpp +++ b/Mesh/meshPartition.cpp @@ -84,10 +84,10 @@ int PartitionMesh(GModel *const model, meshPartitionOptions &options) if (options.createPartitionBoundaries || options.createGhostCells) { - CreatePartitionBoundaries(model, options.createGhostCells, options.createAllDims); + CreatePartitionBoundaries(model, options.createGhostCells); } - if (options.createTopologyFile && options.createPartitionEntities) + if (options.createTopologyFile && options.createPartitionEntities && (options.createPartitionBoundaries || options.createGhostCells)) { CreateTopologyFile(model, options.num_partitions); } @@ -828,7 +828,7 @@ void addPhysical(GModel *model, GEntity *newEntity, GEntity *oldEntity, int part * ******************************************************************************/ -int CreatePartitionBoundaries(GModel *model, bool createGhostCells, bool createAllDims) +int CreatePartitionBoundaries(GModel *model, bool createGhostCells) { unsigned int numElem[6]; const int meshDim = model->getNumMeshElements(numElem); diff --git a/Mesh/meshPartition.h b/Mesh/meshPartition.h index 4442df8f74d53b1bdb8702bda9514d262b759d3d..0f644485285b57098c9e8b4ce0d4db96ace0655d 100644 --- a/Mesh/meshPartition.h +++ b/Mesh/meshPartition.h @@ -48,7 +48,7 @@ template <class ITERATOR> void assignElementsToEntities(GModel *model, std::vector<GVertex *> &newVertices, GVertex *vertex, std::vector<discreteVertex *> &dVertices, ITERATOR it_beg, ITERATOR it_end); void addPhysical(GModel *model, GEntity *newEntity, GEntity *oldEntity, int partition); -int CreatePartitionBoundaries(GModel *model, bool createGhostCells, bool createAllDims = false); +int CreatePartitionBoundaries(GModel *model, bool createGhostCells); template <class ITERATOR> void fillit_(std::unordered_map<MFace, std::vector<MElement*> , Hash_Face, Equal_Face> &faceToElement, ITERATOR it_beg, ITERATOR it_end); template <class ITERATOR> diff --git a/Mesh/meshPartitionOptions.h b/Mesh/meshPartitionOptions.h index 16ad8cb8b4007d66a19f79829280fba09f7cbbe3..ba38fee16c747f0f5c0498462f058dd312ac9948 100644 --- a/Mesh/meshPartitionOptions.h +++ b/Mesh/meshPartitionOptions.h @@ -19,7 +19,6 @@ class meshPartitionOptions int renumber; bool createPartitionBoundaries; bool createGhostCells; - bool createAllDims; bool createPartitionEntities; bool createTopologyFile; @@ -126,10 +125,9 @@ class meshPartitionOptions edge_matching = 3; refine_algorithm = 3; createPartitionBoundaries = true; - createGhostCells = true; - createAllDims = false; + createGhostCells = false; createPartitionEntities = true; - createTopologyFile = true; + createTopologyFile = false; triWeight = 1; quaWeight = 1; tetWeight = 1;