diff --git a/Applications/Utils/SimpleMeshCreation/generateStructuredMesh.cpp b/Applications/Utils/SimpleMeshCreation/generateStructuredMesh.cpp
index cdc7ce9fbd99be84da828bf881a844d93771a8e3..6832c83dcb47fbbbccfd05b28d6b943cdafec9b5 100644
--- a/Applications/Utils/SimpleMeshCreation/generateStructuredMesh.cpp
+++ b/Applications/Utils/SimpleMeshCreation/generateStructuredMesh.cpp
@@ -16,6 +16,7 @@
 #include "Applications/ApplicationsLib/LogogSetup.h"
 
 #include "BaseLib/BuildInfo.h"
+#include "BaseLib/Error.h"
 #include "BaseLib/Subdivision.h"
 #include "BaseLib/TCLAPCustomOutput.h"
 
@@ -179,17 +180,26 @@ int main (int argc, char* argv[])
     vec_div.reserve(dim);
     for (unsigned i=0; i<dim; i++)
     {
-        if (vec_ndivArg[i]->isSet())
-        {
+        if (vec_multiArg[i]->isSet()) {
+            if (vec_ndivArg[i]->isSet()) {
+                // number of partitions in direction is specified
+                vec_d0Arg[i]->isSet() &&
+                    OGS_FATAL(
+                        "Specifying all of --m?, --d?0 and --n? for coordinate "
+                        "\"?\" is not supported.");
+                vec_div.emplace_back(new BaseLib::GradualSubdivisionFixedNum(
+                    length[i], vec_ndivArg[i]->getValue(),
+                    vec_multiArg[i]->getValue()));
+
+            } else {
+                vec_div.emplace_back(new BaseLib::GradualSubdivision(
+                    length[i], vec_d0Arg[i]->getValue(),
+                    vec_dMaxArg[i]->getValue(), vec_multiArg[i]->getValue()));
+            }
+        } else {
             vec_div.emplace_back(
                 new BaseLib::UniformSubdivision(length[i], n_subdivision[i]));
         }
-        else
-        {
-            vec_div.emplace_back(new BaseLib::GradualSubdivision(
-                length[i], vec_d0Arg[i]->getValue(), vec_dMaxArg[i]->getValue(),
-                vec_multiArg[i]->getValue()));
-        }
     }
 
     // generate a mesh