Actual source code: ex1.c

  1: const char help[] = "Coverage tests for TAOTERMSUM";

  3: #include <petsctaoterm.h>

  5: int main(int argc, char **argv)
  6: {
  7:   TaoTerm               sub_a, sub_b, sub_c, sum;
  8:   PetscInt              n_a = 10, n_b = 11, n_c = 12;
  9:   PetscInt              k_a = 9, k_c = 8;
 10:   PetscInt              N, K;
 11:   Mat                   map_b, map_c;
 12:   MPI_Comm              comm;
 13:   Vec                   sol, params;
 14:   TaoTermParametersMode mode;

 16:   PetscFunctionBeginUser;
 17:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 18:   comm = PETSC_COMM_WORLD;

 20:   PetscCall(TaoTermCreate(comm, &sum));
 21:   PetscCall(TaoTermSetType(sum, TAOTERMSUM));

 23:   PetscCall(TaoTermCreateShell(comm, NULL, NULL, &sub_a));
 24:   PetscCall(TaoTermSetParametersMode(sub_a, TAOTERM_PARAMETERS_OPTIONAL));
 25:   PetscCall(TaoTermSetSolutionSizes(sub_a, PETSC_DECIDE, n_a, 1));
 26:   PetscCall(TaoTermSetParametersSizes(sub_a, PETSC_DECIDE, k_a, 1));
 27:   PetscCall(TaoTermSumAddTerm(sum, NULL, 2.0, sub_a, NULL, NULL));
 28:   PetscCall(TaoTermDestroy(&sub_a));

 30:   PetscCall(TaoTermCreateShell(comm, NULL, NULL, &sub_b));
 31:   PetscCall(TaoTermSetParametersMode(sub_b, TAOTERM_PARAMETERS_NONE));
 32:   PetscCall(TaoTermSetSolutionSizes(sub_b, PETSC_DECIDE, n_b, 1));
 33:   PetscCall(MatCreateDense(comm, PETSC_DECIDE, PETSC_DECIDE, n_b, n_a, NULL, &map_b));
 34:   PetscCall(TaoTermSumAddTerm(sum, NULL, 3.0, sub_b, map_b, NULL));
 35:   PetscCall(MatDestroy(&map_b));
 36:   PetscCall(TaoTermDestroy(&sub_b));

 38:   PetscCall(TaoTermCreateShell(comm, NULL, NULL, &sub_c));
 39:   PetscCall(TaoTermSetParametersMode(sub_c, TAOTERM_PARAMETERS_REQUIRED));
 40:   PetscCall(TaoTermSetSolutionSizes(sub_c, PETSC_DECIDE, n_c, 1));
 41:   PetscCall(TaoTermSetParametersSizes(sub_c, PETSC_DECIDE, k_c, 1));
 42:   PetscCall(MatCreateDense(comm, PETSC_DECIDE, PETSC_DECIDE, n_c, n_a, NULL, &map_c));
 43:   PetscCall(TaoTermSumAddTerm(sum, NULL, 4.0, sub_c, map_c, NULL));
 44:   PetscCall(MatDestroy(&map_c));
 45:   PetscCall(TaoTermDestroy(&sub_c));

 47:   PetscCall(TaoTermSetUp(sum));
 48:   PetscCall(TaoTermGetParametersMode(sum, &mode));
 49:   PetscCheck(mode == TAOTERM_PARAMETERS_REQUIRED, comm, PETSC_ERR_PLIB, "wrong parameters mode");

 51:   PetscCall(TaoTermCreateSolutionVec(sum, &sol));
 52:   PetscCall(TaoTermCreateParametersVec(sum, &params));
 53:   PetscCall(VecGetSize(sol, &N));
 54:   PetscCall(VecGetSize(params, &K));

 56:   PetscCheck(N == n_a, comm, PETSC_ERR_PLIB, "wrong solution size");
 57:   PetscCheck(K == k_a + k_c, comm, PETSC_ERR_PLIB, "wrong parameters size");

 59:   PetscCall(VecDestroy(&params));
 60:   PetscCall(VecDestroy(&sol));
 61:   PetscCall(TaoTermDestroy(&sum));
 62:   PetscCall(PetscFinalize());
 63:   return 0;
 64: }

 66: /*TEST

 68:   test:
 69:     suffix: 0
 70:     output_file: output/empty.out

 72: TEST*/