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, ¶ms));
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(¶ms));
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*/