Actual source code: ex14.c

  1: static char help[] = "Tests PetscOptionsGetScalar(), PetscOptionsScalarArray() for complex numbers\n";

  3: #include <petscsys.h>

  5: int main(int argc, char **argv)
  6: {
  7:   PetscInt    n, i;
  8:   PetscScalar a, array[10];
  9:   PetscReal   rarray[10];

 11:   PetscFunctionBeginUser;
 12:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 13:   PetscCall(PetscOptionsGetScalar(NULL, NULL, "-a", &a, NULL));
 14:   PetscCall(PetscPrintf(PETSC_COMM_SELF, "Scalar a = %g + %gi\n", (double)PetscRealPart(a), (double)PetscImaginaryPart(a)));

 16:   PetscOptionsBegin(PETSC_COMM_WORLD, NULL, "test options", NULL);
 17:   n = 10; /* max num of input values */
 18:   PetscCall(PetscOptionsRealArray("-rarray", "Input a real array", "ex14.c", rarray, &n, NULL));
 19:   if (n) {
 20:     PetscCall(PetscPrintf(PETSC_COMM_SELF, "Real rarray of length %" PetscInt_FMT "\n", n));
 21:     for (i = 0; i < n; i++) PetscCall(PetscPrintf(PETSC_COMM_SELF, " %g,\n", (double)rarray[i]));
 22:   }

 24:   n = 10; /* max num of input values */
 25:   PetscCall(PetscOptionsScalarArray("-array", "Input a scalar array", "ex14.c", array, &n, NULL));
 26:   if (n) {
 27:     PetscCall(PetscPrintf(PETSC_COMM_SELF, "Scalar rarray of length %" PetscInt_FMT "\n", n));
 28:     for (i = 0; i < n; i++) {
 29:       if (PetscImaginaryPart(array[i]) < 0.0) {
 30:         PetscCall(PetscPrintf(PETSC_COMM_SELF, " %g - %gi\n", (double)PetscRealPart(array[i]), (double)PetscAbsReal(PetscImaginaryPart(array[i]))));
 31:       } else {
 32:         PetscCall(PetscPrintf(PETSC_COMM_SELF, " %g + %gi\n", (double)PetscRealPart(array[i]), (double)PetscImaginaryPart(array[i])));
 33:       }
 34:     }
 35:   }
 36:   PetscOptionsEnd();
 37:   PetscCall(PetscFinalize());
 38:   return 0;
 39: }

 41: /*TEST

 43:    test:
 44:       requires: complex
 45:       args: -array 1.0,-2-3i,4.5+6.2i,4.5,6.8+4i,i,-i,-1.2i -rarray 1,2,3 -a 1.5+2.1i

 47: TEST*/