Actual source code: ex20.c

  1: static const char help[] = "Tests PetscOptionsPrefix{Push,Pop} and PetscOptionsDeprecated\n\n";

  3: #include <petscsys.h>

  5: int main(int argc, char *argv[])
  6: {
  7:   PetscInt  opts[6] = {0};
  8:   PetscBool hascl = PETSC_FALSE, hasstr = PETSC_FALSE;
  9:   char      deprecated_prefix[PETSC_MAX_OPTION_NAME] = {0};
 10:   PetscBool oldopt = PETSC_FALSE, newopt = PETSC_FALSE, useprefix;

 12:   PetscFunctionBeginUser;
 13:   PetscCall(PetscInitialize(&argc, &argv, 0, help));
 14:   PetscCall(PetscOptionsSetValue(NULL, "-zero", "0"));
 15:   PetscCall(PetscOptionsPrefixPush(NULL, "a_"));
 16:   PetscCall(PetscOptionsSetValue(NULL, "-one", "1"));
 17:   PetscCall(PetscOptionsPrefixPush(NULL, "bb_"));
 18:   PetscCall(PetscOptionsSetValue(NULL, "-two", "2"));
 19:   PetscCall(PetscOptionsPrefixPop(NULL));
 20:   PetscCall(PetscOptionsSetValue(NULL, "-three", "3"));
 21:   PetscCall(PetscOptionsPrefixPush(NULL, "cc_"));
 22:   PetscCall(PetscOptionsPrefixPush(NULL, "ddd_"));
 23:   PetscCall(PetscOptionsSetValue(NULL, "-four", "4"));
 24:   PetscCall(PetscOptionsPrefixPop(NULL));
 25:   PetscCall(PetscOptionsPrefixPop(NULL));
 26:   PetscCall(PetscOptionsPrefixPop(NULL));
 27:   PetscCall(PetscOptionsSetValue(NULL, "-five", "5"));

 29:   PetscCall(PetscOptionsGetInt(NULL, 0, "-zero", &opts[0], 0));
 30:   PetscCall(PetscOptionsGetInt(NULL, 0, "-a_one", &opts[1], 0));
 31:   PetscCall(PetscOptionsGetInt(NULL, 0, "-a_bb_two", &opts[2], 0));
 32:   PetscCall(PetscOptionsGetInt(NULL, 0, "-a_three", &opts[3], 0));
 33:   PetscCall(PetscOptionsGetInt(NULL, 0, "-a_cc_ddd_four", &opts[4], 0));
 34:   PetscCall(PetscOptionsGetInt(NULL, 0, "-five", &opts[5], 0));
 35:   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "opts = {%" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT "}\n", opts[0], opts[1], opts[2], opts[3], opts[4], opts[5]));

 37:   PetscCall(PetscOptionsGetBool(NULL, 0, "-cl", &hascl, 0));
 38:   if (hascl) {
 39:     PetscCall(PetscMemzero(opts, sizeof(opts)));
 40:     PetscCall(PetscOptionsGetInt(NULL, 0, "-cl_zero", &opts[0], 0));
 41:     PetscCall(PetscOptionsGetInt(NULL, 0, "-cl_a_one", &opts[1], 0));
 42:     PetscCall(PetscOptionsGetInt(NULL, 0, "-cl_a_bb_two", &opts[2], 0));
 43:     PetscCall(PetscOptionsGetInt(NULL, 0, "-cl_a_three", &opts[3], 0));
 44:     PetscCall(PetscOptionsGetInt(NULL, 0, "-cl_a_cc_ddd_four", &opts[4], 0));
 45:     PetscCall(PetscOptionsGetInt(NULL, 0, "-cl_five", &opts[5], 0));
 46:     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "cl_opts = {%" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT "}\n", opts[0], opts[1], opts[2], opts[3], opts[4], opts[5]));
 47:   }

 49:   PetscCall(PetscOptionsGetBool(NULL, 0, "-str", &hasstr, 0));
 50:   if (hasstr) {
 51:     PetscCall(
 52:       PetscOptionsInsertString(NULL, "-prefix_push str_ -zero 100 -prefix_push a_ -one 101 -prefix_push bb_ -two 102 -prefix_pop -three 103 -prefix_push cc_ -prefix_push ddd_ -four 104 -prefix_pop -prefix_pop -prefix_pop -five 105 -prefix_pop"));
 53:     PetscCall(PetscMemzero(opts, sizeof(opts)));
 54:     PetscCall(PetscOptionsGetInt(NULL, 0, "-str_zero", &opts[0], 0));
 55:     PetscCall(PetscOptionsGetInt(NULL, 0, "-str_a_one", &opts[1], 0));
 56:     PetscCall(PetscOptionsGetInt(NULL, 0, "-str_a_bb_two", &opts[2], 0));
 57:     PetscCall(PetscOptionsGetInt(NULL, 0, "-str_a_three", &opts[3], 0));
 58:     PetscCall(PetscOptionsGetInt(NULL, 0, "-str_a_cc_ddd_four", &opts[4], 0));
 59:     PetscCall(PetscOptionsGetInt(NULL, 0, "-str_five", &opts[5], 0));
 60:     PetscCall(PetscPrintf(PETSC_COMM_WORLD, "str_opts = {%" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT " %" PetscInt_FMT "}\n", opts[0], opts[1], opts[2], opts[3], opts[4], opts[5]));
 61:   }

 63:   PetscCall(PetscOptionsGetString(NULL, 0, "-deprecated_prefix", deprecated_prefix, sizeof(deprecated_prefix), &useprefix));
 64:   PetscOptionsBegin(PETSC_COMM_WORLD, useprefix ? deprecated_prefix : NULL, "test deprecated options", NULL);
 65:   PetscCall(PetscOptionsBool("-old_option", NULL, NULL, oldopt, &oldopt, NULL));
 66:   PetscCall(PetscOptionsDeprecated("-old_option", "-new_option", "0.0", NULL));
 67:   PetscCall(PetscOptionsBool("-new_option", NULL, NULL, newopt, &newopt, NULL));
 68:   PetscOptionsEnd();
 69:   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "opts = {old %d new %d}\n", oldopt, newopt));

 71:   PetscCall(PetscFinalize());
 72:   return 0;
 73: }

 75: /*TEST

 77:    test:
 78:       suffix: 1
 79:       args: -old_option 1 -new_option 0

 81:    test:
 82:       suffix: 2
 83:       args: -cl -prefix_push cl_ -zero 10 -prefix_push a_ -one 11 -prefix_push bb_ -two 12 -prefix_pop -three 13 -prefix_push cc_ -prefix_push ddd_ -four 14 -prefix_pop -prefix_pop -prefix_pop -five 15 -prefix_pop

 85:    test:
 86:       suffix: 3
 87:       args: -str -deprecated_prefix zz_ -zz_old_option 0 -zz_new_option 1

 89:    test:
 90:       suffix: 4
 91:       args: -deprecated_prefix yy_ -yy_old_option 1

 93: TEST*/