Actual source code: ex14.c


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

  4: #include <petscsys.h>

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

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

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

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

 42: /*TEST

 44:    test:
 45:       requires: complex
 46:       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

 48: TEST*/