From 00acb72ad7dc4e5e4acc7f1f2867ded804c4c004 Mon Sep 17 00:00:00 2001 From: Sebastian Schunert Date: Thu, 24 Sep 2015 10:42:02 -0600 Subject: [PATCH] Make partitioner block a mesh subblock, remove custom partitioner type (#5543) --- framework/include/mesh/MooseMesh.h | 7 ++ framework/src/actions/PartitionerAction.C | 1 + framework/src/mesh/MooseMesh.C | 112 +++++++++++------- framework/src/parser/MooseSyntax.C | 2 +- .../custom_linear_partitioner_test.i | 11 +- .../gold/custom_linear_partitioner_test_out.e | Bin 0 -> 129220 bytes .../linear_partitioner_test.i | 82 ------------- test/tests/mesh/custom_partitioner/tests | 7 ++ 8 files changed, 87 insertions(+), 135 deletions(-) create mode 100644 test/tests/mesh/custom_partitioner/gold/custom_linear_partitioner_test_out.e delete mode 100644 test/tests/mesh/custom_partitioner/linear_partitioner_test.i create mode 100644 test/tests/mesh/custom_partitioner/tests diff --git a/framework/include/mesh/MooseMesh.h b/framework/include/mesh/MooseMesh.h index c8b545869746..14f8622e7ec3 100644 --- a/framework/include/mesh/MooseMesh.h +++ b/framework/include/mesh/MooseMesh.h @@ -687,6 +687,12 @@ class MooseMesh : Partitioner * getCustomPartitioner() const; void setCustomPartitioner(Partitioner * custom_partitioner); + /** + * Setter and getter for _custom_partitioner_requested + */ + bool isCustomPartitionerRequested() const; + void setIsCustomPartitionerRequested(bool cpr); + protected: /// Can be set to PARALLEL, SERIAL, or DEFAULT. Determines whether /// the underlying libMesh mesh is a SerialMesh or ParallelMesh. @@ -707,6 +713,7 @@ class MooseMesh : /// The custom partitioner Partitioner * _custom_partitioner; + bool _custom_partitioner_requested; /// Convenience enums enum { diff --git a/framework/src/actions/PartitionerAction.C b/framework/src/actions/PartitionerAction.C index dd175fdd057f..5f654f6b859c 100644 --- a/framework/src/actions/PartitionerAction.C +++ b/framework/src/actions/PartitionerAction.C @@ -38,6 +38,7 @@ PartitionerAction::PartitionerAction(InputParameters params) : void PartitionerAction::act() { + _mesh->setIsCustomPartitionerRequested(true); switch (_partitioner_type) { case 0: diff --git a/framework/src/mesh/MooseMesh.C b/framework/src/mesh/MooseMesh.C index 2e03defe0fd0..d88455fef740 100644 --- a/framework/src/mesh/MooseMesh.C +++ b/framework/src/mesh/MooseMesh.C @@ -72,7 +72,7 @@ InputParameters validParams() "In particular you must supply this for GMSH meshes. " "Note: This is completely ignored for ExodusII meshes!"); - MooseEnum partitioning("default=-3 metis=-2 parmetis=-1 linear=0 centroid hilbert_sfc morton_sfc custom", "default"); + MooseEnum partitioning("default=-3 metis=-2 parmetis=-1 linear=0 centroid hilbert_sfc morton_sfc", "default"); params.addParam("partitioner", partitioning, "Specifies a mesh partitioner to use when splitting the mesh for a parallel computation."); MooseEnum direction("x y z radial"); params.addParam("centroid_partitioner_direction", direction, "Specifies the sort direction if using the centroid partitioner. Available options: x, y, z, radial"); @@ -99,6 +99,7 @@ MooseMesh::MooseMesh(const InputParameters & parameters) : _mesh(NULL), _partitioner_name(getParam("partitioner")), _partitioner_overridden(false), + _custom_partitioner_requested(false), _uniform_refine_level(0), _is_changed(false), _is_nemesis(getParam("nemesis")), @@ -1699,54 +1700,63 @@ MooseMesh::getNormalByBoundaryID(BoundaryID id) const void MooseMesh::init() { - // Set the partitioner - switch (_partitioner_name) + if (_custom_partitioner_requested) { - case -3: // default - // We'll use the default partitioner, but notify the user of which one is being used... - if (_use_parallel_mesh) - _partitioner_name = "parmetis"; - else - _partitioner_name = "metis"; - break; - - // No need to explicitily create the metis or parmetis partitioners, - // They are the default for serial and parallel mesh respectively - case -2: // metis - case -1: // parmetis - break; - - case 0: // linear - getMesh().partitioner().reset(new LinearPartitioner); - break; - case 1: // centroid - { - if (!isParamValid("centroid_partitioner_direction")) - mooseError("If using the centroid partitioner you _must_ specify centroid_partitioner_direction!"); - - MooseEnum direction = getParam("centroid_partitioner_direction"); - - if (direction == "x") - getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::X)); - else if (direction == "y") - getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::Y)); - else if (direction == "z") - getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::Z)); - else if (direction == "radial") - getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::RADIAL)); - break; - } - case 2: // hilbert_sfc - getMesh().partitioner().reset(new HilbertSFCPartitioner); - break; - case 3: // morton_sfc - getMesh().partitioner().reset(new MortonSFCPartitioner); - break; - case 4: // custom + // Check of partitioner is supplied (not allowed if custom partitioner is used) + if (!parameters().isParamSetByAddParam("partitioner")) + mooseError("If partitioner block is provded, partitioner keyword cannot be used!"); + // Set custom partitioner if (!_custom_partitioner) mooseError("If using partitioner type custom you must explicitly provide a partitioner in your input file!"); getMesh().partitioner().reset(_custom_partitioner); - break; + } + else + { + // Set standard partitioner + // Set the partitioner based on partitioner name + switch (_partitioner_name) + { + case -3: // default + // We'll use the default partitioner, but notify the user of which one is being used... + if (_use_parallel_mesh) + _partitioner_name = "parmetis"; + else + _partitioner_name = "metis"; + break; + + // No need to explicitily create the metis or parmetis partitioners, + // They are the default for serial and parallel mesh respectively + case -2: // metis + case -1: // parmetis + break; + + case 0: // linear + getMesh().partitioner().reset(new LinearPartitioner); + break; + case 1: // centroid + { + if (!isParamValid("centroid_partitioner_direction")) + mooseError("If using the centroid partitioner you _must_ specify centroid_partitioner_direction!"); + + MooseEnum direction = getParam("centroid_partitioner_direction"); + + if (direction == "x") + getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::X)); + else if (direction == "y") + getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::Y)); + else if (direction == "z") + getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::Z)); + else if (direction == "radial") + getMesh().partitioner().reset(new CentroidPartitioner(CentroidPartitioner::RADIAL)); + break; + } + case 2: // hilbert_sfc + getMesh().partitioner().reset(new HilbertSFCPartitioner); + break; + case 3: // morton_sfc + getMesh().partitioner().reset(new MortonSFCPartitioner); + break; + } } if (_app.isRecovering() && _allow_recovery && _app.isUltimateMaster()) @@ -2185,6 +2195,18 @@ MooseMesh::setCustomPartitioner(Partitioner * custom_partitioner) _custom_partitioner = custom_partitioner; } +bool +MooseMesh::isCustomPartitionerRequested() const +{ + return _custom_partitioner_requested; +} + +void +MooseMesh::setIsCustomPartitionerRequested(bool cpr) +{ + _custom_partitioner_requested = cpr; +} + void MooseMesh::addMortarInterface(const std::string & name, BoundaryName master, BoundaryName slave, SubdomainName domain_name) { diff --git a/framework/src/parser/MooseSyntax.C b/framework/src/parser/MooseSyntax.C index ec69373047b9..153926688fca 100644 --- a/framework/src/parser/MooseSyntax.C +++ b/framework/src/parser/MooseSyntax.C @@ -104,7 +104,7 @@ void associateSyntax(Syntax & syntax, ActionFactory & action_factory) syntax.registerActionSyntax("AdaptivityAction", "Executioner/Adaptivity"); #endif - syntax.registerActionSyntax("PartitionerAction", "Partitioner"); + syntax.registerActionSyntax("PartitionerAction", "Mesh/Partitioner"); syntax.registerActionSyntax("AddDiracKernelAction", "DiracKernels/*"); diff --git a/test/tests/mesh/custom_partitioner/custom_linear_partitioner_test.i b/test/tests/mesh/custom_partitioner/custom_linear_partitioner_test.i index 6dd24ac8fc79..ba158a6bce2f 100644 --- a/test/tests/mesh/custom_partitioner/custom_linear_partitioner_test.i +++ b/test/tests/mesh/custom_partitioner/custom_linear_partitioner_test.i @@ -11,15 +11,12 @@ ymin = 0.0 ymax = 10.0 - partitioner = custom - - + [./Partitioner] + partitioner = linear + [../] distribution = serial [] -[Partitioner] - partitioner_type = linear -[] [Variables] active = 'u' @@ -79,7 +76,7 @@ [] [Outputs] - file_base = out + file_base = custom_linear_partitioner_test_out [./exodus] type = Exodus elemental_as_nodal = true diff --git a/test/tests/mesh/custom_partitioner/gold/custom_linear_partitioner_test_out.e b/test/tests/mesh/custom_partitioner/gold/custom_linear_partitioner_test_out.e new file mode 100644 index 0000000000000000000000000000000000000000..c7715698c4951575f9d40fa57e734095ed78977e GIT binary patch literal 129220 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 literal 0 HcmV?d00001 diff --git a/test/tests/mesh/custom_partitioner/linear_partitioner_test.i b/test/tests/mesh/custom_partitioner/linear_partitioner_test.i deleted file mode 100644 index 978a69a576e6..000000000000 --- a/test/tests/mesh/custom_partitioner/linear_partitioner_test.i +++ /dev/null @@ -1,82 +0,0 @@ -[Mesh] - type = GeneratedMesh - dim = 2 - - nx = 10 - ny = 100 - - xmin = 0.0 - xmax = 1.0 - - ymin = 0.0 - ymax = 10.0 - - partitioner = linear - - distribution = serial -[] - -[Variables] - active = 'u' - - [./u] - order = FIRST - family = LAGRANGE - [../] -[] - -[AuxVariables] - [./proc_id] - order = CONSTANT - family = MONOMIAL - [../] -[] - -[Kernels] - active = 'diff' - - [./diff] - type = Diffusion - variable = u - [../] -[] - -[AuxKernels] - [./proc_id] - type = ProcessorIDAux - variable = proc_id - [../] -[] - -[BCs] - active = 'left right' - - [./left] - type = DirichletBC - variable = u - boundary = 3 - value = 0 - [../] - - [./right] - type = DirichletBC - variable = u - boundary = 1 - value = 1 - [../] -[] - -[Executioner] - type = Steady - - # Preconditioned JFNK (default) - solve_type = 'PJFNK' -[] - -[Outputs] - file_base = out - [./exodus] - type = Exodus - elemental_as_nodal = true - [../] -[] diff --git a/test/tests/mesh/custom_partitioner/tests b/test/tests/mesh/custom_partitioner/tests new file mode 100644 index 000000000000..c071dc3a0752 --- /dev/null +++ b/test/tests/mesh/custom_partitioner/tests @@ -0,0 +1,7 @@ +[Tests] + [./custom_linear_partitioner] + type = 'Exodiff' + input = 'custom_linear_partitioner_test.i' + exodiff = 'custom_linear_partitioner_test_out.e' + [../] +[]