Actual source code: ex72.c
1: static char help[] = "Reads a PETSc matrix and vector from a file and solves a linear system.\n\
2: This version first preloads and solves a small system, then loads \n\
3: another (larger) system and solves it as well. This example illustrates\n\
4: preloading of instructions with the smaller system so that more accurate\n\
5: performance monitoring can be done with the larger one (that actually\n\
6: is the system of interest). See the 'Performance Hints' chapter of the\n\
7: users manual for a discussion of preloading. Input parameters include\n\
8: -f0 <input_file> : first file to load (small system)\n\
9: -f1 <input_file> : second file to load (larger system)\n\n\
10: -nearnulldim <0> : number of vectors in the near-null space immediately following matrix\n\n\
11: -trans : solve transpose system instead\n\n";
12: /*
13: This code can be used to test PETSc interface to other packages.\n\
14: Examples of command line options: \n\
15: ./ex72 -f0 <datafile> -ksp_type preonly \n\
16: -help -ksp_view \n\
17: -num_numfac <num_numfac> -num_rhs <num_rhs> \n\
18: -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type superlu or superlu_dist or mumps \n\
19: -ksp_type preonly -pc_type cholesky -pc_factor_mat_solver_type mumps \n\
20: mpiexec -n <np> ./ex72 -f0 <datafile> -ksp_type cg -pc_type asm -pc_asm_type basic -sub_pc_type icc -mat_type sbaij
21: \n\n";
22: */
24: /*
25: Include "petscksp.h" so that we can use KSP solvers. Note that this file
26: automatically includes:
27: petscsys.h - base PETSc routines petscvec.h - vectors
28: petscmat.h - matrices
29: petscis.h - index sets petscksp.h - Krylov subspace methods
30: petscviewer.h - viewers petscpc.h - preconditioners
31: */
32: #include <petscksp.h>
34: int main(int argc, char **args)
35: {
36: KSP ksp; /* linear solver context */
37: Mat A; /* matrix */
38: Vec x, b, u; /* approx solution, RHS, exact solution */
39: PetscViewer viewer; /* viewer */
40: char file[4][PETSC_MAX_PATH_LEN]; /* input file name */
41: PetscBool table = PETSC_FALSE, flg, trans = PETSC_FALSE, initialguess = PETSC_FALSE;
42: PetscBool outputSoln = PETSC_FALSE, constantnullspace = PETSC_FALSE;
43: PetscInt its, num_numfac, m, n, M, p, nearnulldim = 0;
44: PetscReal norm;
45: PetscBool preload = PETSC_TRUE, isSymmetric, cknorm = PETSC_FALSE, initialguessfile = PETSC_FALSE;
46: PetscMPIInt rank;
47: char initialguessfilename[PETSC_MAX_PATH_LEN];
48: char mtype[PETSC_MAX_PATH_LEN];
50: PetscFunctionBeginUser;
51: PetscCall(PetscInitialize(&argc, &args, NULL, help));
52: PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
53: PetscCall(PetscOptionsGetBool(NULL, NULL, "-table", &table, NULL));
54: PetscCall(PetscOptionsGetBool(NULL, NULL, "-constantnullspace", &constantnullspace, NULL));
55: PetscCall(PetscOptionsGetBool(NULL, NULL, "-trans", &trans, NULL));
56: PetscCall(PetscOptionsGetBool(NULL, NULL, "-initialguess", &initialguess, NULL));
57: PetscCall(PetscOptionsGetBool(NULL, NULL, "-output_solution", &outputSoln, NULL));
58: PetscCall(PetscOptionsGetString(NULL, NULL, "-initialguessfilename", initialguessfilename, sizeof(initialguessfilename), &initialguessfile));
59: PetscCall(PetscOptionsGetInt(NULL, NULL, "-nearnulldim", &nearnulldim, NULL));
61: /*
62: Determine files from which we read the two linear systems
63: (matrix and right-hand-side vector).
64: */
65: PetscCall(PetscOptionsGetString(NULL, NULL, "-f", file[0], sizeof(file[0]), &flg));
66: if (flg) {
67: PetscCall(PetscStrncpy(file[1], file[0], sizeof(file[1])));
68: preload = PETSC_FALSE;
69: } else {
70: PetscCall(PetscOptionsGetString(NULL, NULL, "-f0", file[0], sizeof(file[0]), &flg));
71: PetscCheck(flg, PETSC_COMM_WORLD, PETSC_ERR_USER_INPUT, "Must indicate binary file with the -f0 or -f option");
72: PetscCall(PetscOptionsGetString(NULL, NULL, "-f1", file[1], sizeof(file[1]), &flg));
73: if (!flg) preload = PETSC_FALSE; /* don't bother with second system */
74: }
76: /* -----------------------------------------------------------
77: Beginning of linear solver loop
78: ----------------------------------------------------------- */
79: /*
80: Loop through the linear solve 2 times.
81: - The intention here is to preload and solve a small system;
82: then load another (larger) system and solve it as well.
83: This process preloads the instructions with the smaller
84: system so that more accurate performance monitoring (via
85: -log_view) can be done with the larger one (that actually
86: is the system of interest).
87: */
88: PetscPreLoadBegin(preload, "Load system");
90: /* - - - - - - - - - - - New Stage - - - - - - - - - - - - -
91: Load system
92: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
94: /*
95: Open binary file. Note that we use FILE_MODE_READ to indicate
96: reading from this file.
97: */
98: PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[PetscPreLoadIt], FILE_MODE_READ, &viewer));
100: /*
101: Load the matrix and vector; then destroy the viewer.
102: */
103: PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
104: PetscCall(MatSetFromOptions(A));
105: PetscCall(MatLoad(A, viewer));
107: PetscCall(PetscOptionsGetString(NULL, NULL, "-mat_convert_type", mtype, sizeof(mtype), &flg));
108: if (flg) PetscCall(MatConvert(A, mtype, MAT_INPLACE_MATRIX, &A));
110: if (nearnulldim) {
111: MatNullSpace nullsp;
112: Vec *nullvecs;
113: PetscCall(PetscMalloc1(nearnulldim, &nullvecs));
114: for (PetscInt i = 0; i < nearnulldim; i++) {
115: PetscCall(VecCreate(PETSC_COMM_WORLD, &nullvecs[i]));
116: PetscCall(VecLoad(nullvecs[i], viewer));
117: }
118: PetscCall(MatNullSpaceCreate(PETSC_COMM_WORLD, PETSC_FALSE, nearnulldim, nullvecs, &nullsp));
119: PetscCall(MatSetNearNullSpace(A, nullsp));
120: for (PetscInt i = 0; i < nearnulldim; i++) PetscCall(VecDestroy(&nullvecs[i]));
121: PetscCall(PetscFree(nullvecs));
122: PetscCall(MatNullSpaceDestroy(&nullsp));
123: }
124: if (constantnullspace) {
125: MatNullSpace constant;
126: PetscCall(MatNullSpaceCreate(PETSC_COMM_WORLD, PETSC_TRUE, 0, NULL, &constant));
127: PetscCall(MatSetNullSpace(A, constant));
128: PetscCall(MatNullSpaceDestroy(&constant));
129: }
130: flg = PETSC_FALSE;
131: PetscCall(PetscOptionsGetString(NULL, NULL, "-rhs", file[2], sizeof(file[2]), &flg));
132: PetscCall(VecCreate(PETSC_COMM_WORLD, &b));
133: if (flg) { /* rhs is stored in a separate file */
134: if (file[2][0] == '0' || file[2][0] == 0) {
135: PetscInt m;
136: PetscScalar one = 1.0;
137: PetscCall(PetscInfo(0, "Using vector of ones for RHS\n"));
138: PetscCall(MatGetLocalSize(A, &m, NULL));
139: PetscCall(VecSetSizes(b, m, PETSC_DECIDE));
140: PetscCall(VecSetFromOptions(b));
141: PetscCall(VecSet(b, one));
142: } else {
143: PetscCall(PetscViewerDestroy(&viewer));
144: PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[2], FILE_MODE_READ, &viewer));
145: PetscCall(VecSetFromOptions(b));
146: PetscCall(VecLoad(b, viewer));
147: }
148: } else { /* rhs is stored in the same file as matrix */
149: PetscCall(VecSetFromOptions(b));
150: PetscCall(VecLoad(b, viewer));
151: }
152: PetscCall(PetscViewerDestroy(&viewer));
154: /* Make A singular for testing zero-pivot of ilu factorization */
155: /* Example: ./ex72 -f0 <datafile> -test_zeropivot -pc_factor_shift_type <shift_type> */
156: flg = PETSC_FALSE;
157: PetscCall(PetscOptionsGetBool(NULL, NULL, "-test_zeropivot", &flg, NULL));
158: if (flg) { /* set a row as zeros */
159: PetscInt row = 0;
160: PetscCall(MatSetOption(A, MAT_KEEP_NONZERO_PATTERN, PETSC_TRUE));
161: PetscCall(MatZeroRows(A, 1, &row, 0.0, NULL, NULL));
162: }
164: /* Check whether A is symmetric, then set A->symmetric option */
165: flg = PETSC_FALSE;
166: PetscCall(PetscOptionsGetBool(NULL, NULL, "-check_symmetry", &flg, NULL));
167: if (flg) {
168: PetscCall(MatIsSymmetric(A, 0.0, &isSymmetric));
169: if (!isSymmetric) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Warning: A is non-symmetric \n"));
170: }
172: /*
173: If the loaded matrix is larger than the vector (due to being padded
174: to match the block size of the system), then create a new padded vector.
175: */
177: PetscCall(MatGetLocalSize(A, NULL, &n));
178: PetscCall(MatGetSize(A, &M, NULL));
179: PetscCall(VecGetSize(b, &m));
180: PetscCall(VecGetLocalSize(b, &p));
181: flg = (PetscBool)(M != m || p != n); /* Global or local dimension mismatch */
182: PetscCallMPI(MPIU_Allreduce(MPI_IN_PLACE, &flg, 1, MPI_C_BOOL, MPI_LOR, PetscObjectComm((PetscObject)A)));
183: if (flg) { /* Create a new vector b by padding the old one */
184: PetscInt j, mvec, start, end, indx;
185: Vec tmp;
186: PetscScalar *bold;
188: PetscCall(VecCreate(PETSC_COMM_WORLD, &tmp));
189: PetscCall(VecSetSizes(tmp, n, PETSC_DECIDE));
190: PetscCall(VecSetFromOptions(tmp));
191: PetscCall(VecGetOwnershipRange(b, &start, &end));
192: PetscCall(VecGetLocalSize(b, &mvec));
193: PetscCall(VecGetArray(b, &bold));
194: for (j = 0; j < mvec; j++) {
195: indx = start + j;
196: PetscCall(VecSetValues(tmp, 1, &indx, bold + j, INSERT_VALUES));
197: }
198: PetscCall(VecRestoreArray(b, &bold));
199: PetscCall(VecDestroy(&b));
200: PetscCall(VecAssemblyBegin(tmp));
201: PetscCall(VecAssemblyEnd(tmp));
202: b = tmp;
203: }
205: PetscCall(MatCreateVecs(A, &x, NULL));
206: PetscCall(VecDuplicate(b, &u));
207: if (initialguessfile) {
208: PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, initialguessfilename, FILE_MODE_READ, &viewer));
209: PetscCall(VecLoad(x, viewer));
210: PetscCall(PetscViewerDestroy(&viewer));
211: initialguess = PETSC_TRUE;
212: } else if (initialguess) PetscCall(VecSet(x, 1.0));
213: else PetscCall(VecSet(x, 0.0));
215: /* Check scaling in A */
216: flg = PETSC_FALSE;
217: PetscCall(PetscOptionsGetBool(NULL, NULL, "-check_scaling", &flg, NULL));
218: if (flg) {
219: Vec max, min, l1;
220: PetscInt idx;
221: PetscReal val;
223: PetscCall(VecDuplicate(x, &max));
224: PetscCall(VecDuplicate(x, &min));
225: PetscCall(VecDuplicate(x, &l1));
226: PetscCall(MatGetRowMaxAbs(A, max, NULL));
227: PetscCall(MatGetRowMinAbs(A, min, NULL));
228: PetscCall(MatGetRowSumAbs(A, l1));
229: if (PETSC_FALSE) {
230: PetscCall(PetscViewerASCIIOpen(PETSC_COMM_WORLD, "max.data", &viewer));
231: PetscCall(VecView(max, viewer));
232: PetscCall(PetscViewerDestroy(&viewer));
233: PetscCall(PetscViewerASCIIOpen(PETSC_COMM_WORLD, "min.data", &viewer));
234: PetscCall(VecView(min, viewer));
235: PetscCall(PetscViewerDestroy(&viewer));
236: PetscCall(PetscViewerASCIIOpen(PETSC_COMM_WORLD, "l1.data", &viewer));
237: PetscCall(VecView(l1, viewer));
238: PetscCall(PetscViewerDestroy(&viewer));
239: }
240: PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD));
241: PetscCall(VecMax(max, &idx, &val));
242: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest max row element %g at row %" PetscInt_FMT "\n", (double)val, idx));
243: PetscCall(VecView(min, PETSC_VIEWER_DRAW_WORLD));
244: PetscCall(VecMin(min, &idx, &val));
245: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Smallest min row element %g at row %" PetscInt_FMT "\n", (double)val, idx));
246: PetscCall(VecMin(max, &idx, &val));
247: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Smallest max row element %g at row %" PetscInt_FMT "\n", (double)val, idx));
248: PetscCall(VecPointwiseDivide(max, max, min));
249: PetscCall(VecMax(max, &idx, &val));
250: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest row ratio %g at row %" PetscInt_FMT "\n", (double)val, idx));
251: PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD));
252: PetscCall(VecMax(max, &idx, &val));
253: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest row ratio %g at row %" PetscInt_FMT "\n", (double)val, idx));
254: PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD));
255: PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD));
256: PetscCall(VecMax(l1, &idx, &val));
257: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest l1 row element %g at row %" PetscInt_FMT "\n", (double)val, idx));
258: PetscCall(VecDestroy(&max));
259: PetscCall(VecDestroy(&min));
260: PetscCall(VecDestroy(&l1));
261: }
263: /* PetscCall(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); */
264: /* - - - - - - - - - - - New Stage - - - - - - - - - - - - -
265: Setup solve for system
266: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
267: /*
268: Conclude profiling last stage; begin profiling next stage.
269: */
270: PetscPreLoadStage("KSPSetUpSolve");
272: /*
273: Create linear solver; set operators; set runtime options.
274: */
275: PetscCall(KSPCreate(PETSC_COMM_WORLD, &ksp));
276: PetscCall(KSPSetInitialGuessNonzero(ksp, initialguess));
277: num_numfac = 1;
278: PetscCall(PetscOptionsGetInt(NULL, NULL, "-num_numfac", &num_numfac, NULL));
279: while (num_numfac--) {
280: PC pc;
281: PetscBool lsqr, isbddc, ismatis;
282: char str[32];
284: PetscCall(PetscOptionsGetString(NULL, NULL, "-ksp_type", str, sizeof(str), &lsqr));
285: if (lsqr) PetscCall(PetscStrcmp("lsqr", str, &lsqr));
286: if (lsqr) {
287: Mat BtB;
288: PetscCall(MatTransposeMatMult(A, A, MAT_INITIAL_MATRIX, 4, &BtB));
289: PetscCall(KSPSetOperators(ksp, A, BtB));
290: PetscCall(MatDestroy(&BtB));
291: } else PetscCall(KSPSetOperators(ksp, A, A));
292: PetscCall(KSPSetFromOptions(ksp));
294: /* if we test BDDC, make sure pmat is of type MATIS */
295: PetscCall(KSPGetPC(ksp, &pc));
296: PetscCall(PetscObjectTypeCompare((PetscObject)pc, PCBDDC, &isbddc));
297: PetscCall(PetscObjectTypeCompare((PetscObject)A, MATIS, &ismatis));
298: if (isbddc && !ismatis) {
299: Mat J;
301: PetscCall(MatConvert(A, MATIS, MAT_INITIAL_MATRIX, &J));
302: PetscCall(KSPSetOperators(ksp, A, J));
303: PetscCall(MatDestroy(&J));
304: }
306: /*
307: Here we explicitly call KSPSetUp() and KSPSetUpOnBlocks() to
308: enable more precise profiling of setting up the preconditioner.
309: These calls are optional, since both will be called within
310: KSPSolve() if they haven't been called already.
311: */
312: PetscCall(KSPSetUp(ksp));
313: PetscCall(KSPSetUpOnBlocks(ksp));
315: /* - - - - - - - - - - - New Stage - - - - - - - - - - - - -
316: Solve system
317: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
319: /*
320: Solve linear system;
321: */
322: if (trans) {
323: PetscCall(KSPSolveTranspose(ksp, b, x));
324: PetscCall(KSPGetIterationNumber(ksp, &its));
325: } else {
326: PetscInt num_rhs = 1;
327: PetscCall(PetscOptionsGetInt(NULL, NULL, "-num_rhs", &num_rhs, NULL));
328: cknorm = PETSC_FALSE;
329: PetscCall(PetscOptionsGetBool(NULL, NULL, "-cknorm", &cknorm, NULL));
330: while (num_rhs--) {
331: if (num_rhs == 1) PetscCall(VecSet(x, 0.0));
332: PetscCall(KSPSolve(ksp, b, x));
333: }
334: PetscCall(KSPGetIterationNumber(ksp, &its));
335: if (cknorm) { /* Check error for each rhs */
336: if (trans) PetscCall(MatMultTranspose(A, x, u));
337: else PetscCall(MatMult(A, x, u));
338: PetscCall(VecAXPY(u, -1.0, b));
339: PetscCall(VecNorm(u, NORM_2, &norm));
340: PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Number of iterations = %3" PetscInt_FMT "\n", its));
341: if (!PetscIsNanScalar(norm)) PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Residual norm %g\n", (double)norm));
342: }
343: } /* while (num_rhs--) */
345: /* - - - - - - - - - - - New Stage - - - - - - - - - - - - -
346: Check error, print output, free data structures.
347: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
349: /*
350: Check error
351: */
352: if (trans) PetscCall(MatMultTranspose(A, x, u));
353: else PetscCall(MatMult(A, x, u));
354: PetscCall(VecAXPY(u, -1.0, b));
355: PetscCall(VecNorm(u, NORM_2, &norm));
356: /*
357: Write output (optionally using table for solver details).
358: - PetscPrintf() handles output for multiprocessor jobs
359: by printing from only one processor in the communicator.
360: - KSPView() prints information about the linear solver.
361: */
362: if (table) {
363: char *matrixname = NULL, kspinfo[120];
365: /*
366: Open a string viewer; then write info to it.
367: */
368: PetscCall(PetscViewerStringOpen(PETSC_COMM_WORLD, kspinfo, sizeof(kspinfo), &viewer));
369: PetscCall(KSPView(ksp, viewer));
370: PetscCall(PetscStrrchr(file[PetscPreLoadIt], '/', &matrixname));
371: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%-8.8s %3" PetscInt_FMT " %2.0e %s \n", matrixname, its, (double)norm, kspinfo));
373: /*
374: Destroy the viewer
375: */
376: PetscCall(PetscViewerDestroy(&viewer));
377: } else {
378: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Number of iterations = %3" PetscInt_FMT "\n", its));
379: if (!PetscIsNanReal(norm)) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Residual norm %g\n", (double)norm));
380: }
381: PetscCall(PetscOptionsGetString(NULL, NULL, "-solution", file[3], sizeof(file[3]), &flg));
382: if (flg) {
383: Vec xstar;
384: PetscReal norm;
386: PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[3], FILE_MODE_READ, &viewer));
387: PetscCall(VecCreate(PETSC_COMM_WORLD, &xstar));
388: PetscCall(VecLoad(xstar, viewer));
389: PetscCall(VecAXPY(xstar, -1.0, x));
390: PetscCall(VecNorm(xstar, NORM_2, &norm));
391: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Error norm %g\n", (double)norm));
392: PetscCall(VecDestroy(&xstar));
393: PetscCall(PetscViewerDestroy(&viewer));
394: }
395: if (outputSoln) {
396: PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "solution.petsc", FILE_MODE_WRITE, &viewer));
397: PetscCall(VecView(x, viewer));
398: PetscCall(PetscViewerDestroy(&viewer));
399: }
401: flg = PETSC_FALSE;
402: PetscCall(PetscOptionsGetBool(NULL, NULL, "-ksp_reason", &flg, NULL));
403: if (flg) {
404: KSPConvergedReason reason;
405: PetscCall(KSPGetConvergedReason(ksp, &reason));
406: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "KSPConvergedReason: %s\n", KSPConvergedReasons[reason]));
407: }
409: } /* while (num_numfac--) */
411: /*
412: Free work space. All PETSc objects should be destroyed when they
413: are no longer needed.
414: */
415: PetscCall(MatDestroy(&A));
416: PetscCall(VecDestroy(&b));
417: PetscCall(VecDestroy(&u));
418: PetscCall(VecDestroy(&x));
419: PetscCall(KSPDestroy(&ksp));
420: PetscPreLoadEnd();
421: /* -----------------------------------------------------------
422: End of linear solver loop
423: ----------------------------------------------------------- */
425: PetscCall(PetscFinalize());
426: return 0;
427: }
429: /*TEST
431: build:
432: requires: !complex
434: testset:
435: suffix: 1
436: nsize: 2
437: args: -f0 ${wPETSC_DIR}/share/petsc/datafiles/matrices/spd-real-int@PETSC_INDEX_SIZE@-float@PETSC_SCALAR_SIZE@
438: requires: !__float128
440: testset:
441: suffix: 1a
442: args: -f0 ${wPETSC_DIR}/share/petsc/datafiles/matrices/spd-real-int@PETSC_INDEX_SIZE@-float@PETSC_SCALAR_SIZE@
443: requires: !__float128
445: testset:
446: nsize: 2
447: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
448: args: -f0 ${DATAFILESPATH}/matrices/medium
449: args: -ksp_type bicg
450: test:
451: suffix: 2
453: testset:
454: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
455: args: -f0 ${DATAFILESPATH}/matrices/medium
456: args: -ksp_type bicg
457: test:
458: suffix: 4
459: args: -pc_type lu
460: test:
461: suffix: 5
463: testset:
464: suffix: 6
465: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
466: args: -f0 ${DATAFILESPATH}/matrices/fem1
467: args: -pc_factor_levels 2 -pc_factor_fill 1.73 -ksp_gmres_cgs_refinement_type refine_always
469: testset:
470: TODO: Matrix row/column sizes are not compatible with block size
471: suffix: 7
472: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
473: args: -f0 ${DATAFILESPATH}/matrices/medium
474: args: -viewer_binary_skip_info -mat_type seqbaij
475: args: -matload_block_size {{2 3 4 5 6 7 8}separate output}
476: args: -ksp_max_it 100 -ksp_gmres_cgs_refinement_type refine_always
477: args: -ksp_rtol 1.0e-15 -ksp_monitor
478: test:
479: suffix: a
480: test:
481: suffix: b
482: args: -pc_factor_mat_ordering_type nd
483: test:
484: suffix: c
485: args: -pc_factor_levels 1
486: test:
487: requires: metis
488: suffix: d
489: args: -pc_factor_mat_ordering_type metisnd
491: testset:
492: TODO: Matrix row/column sizes are not compatible with block size
493: suffix: 7_d
494: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
495: args: -f0 ${DATAFILESPATH}/matrices/medium
496: args: -viewer_binary_skip_info -mat_type seqbaij
497: args: -matload_block_size {{2 3 4 5 6 7 8}shared output}
498: args: -ksp_type preonly -pc_type lu
500: testset:
501: suffix: 8
502: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
503: args: -f0 ${DATAFILESPATH}/matrices/medium
504: args: -ksp_diagonal_scale -pc_type eisenstat -ksp_monitor -ksp_diagonal_scale_fix -ksp_gmres_cgs_refinement_type refine_always -mat_no_inode
506: testset:
507: TODO: Matrix row/column sizes are not compatible with block size
508: suffix: 9
509: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
510: args: -f0 ${DATAFILESPATH}/matrices/medium
511: args: -viewer_binary_skip_info -matload_block_size {{1 2 3 4 5 6 7}separate output} -ksp_max_it 100 -ksp_gmres_cgs_refinement_type refine_always -ksp_rtol 1.0e-15 -ksp_monitor
512: test:
513: suffix: a
514: args: -mat_type seqbaij
515: test:
516: suffix: b
517: args: -mat_type seqbaij -trans
518: test:
519: suffix: c
520: nsize: 2
521: args: -mat_type mpibaij
522: test:
523: suffix: d
524: nsize: 2
525: args: -mat_type mpibaij -trans
526: test:
527: suffix: e
528: nsize: 3
529: args: -mat_type mpibaij
530: test:
531: suffix: f
532: nsize: 3
533: args: -mat_type mpibaij -trans
535: testset:
536: suffix: 10
537: nsize: 2
538: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
539: args: -ksp_type fgmres -pc_type ksp -f0 ${DATAFILESPATH}/matrices/medium -ksp_fgmres_modifypcksp -ksp_monitor
541: testset:
542: suffix: 12
543: requires: datafilespath matlab
544: args: -pc_type lu -pc_factor_mat_solver_type matlab -f0 ${DATAFILESPATH}/matrices/arco1
546: testset:
547: suffix: 13
548: requires: datafilespath lusol
549: args: -f0 ${DATAFILESPATH}/matrices/arco1
550: args: -mat_type lusol -pc_type lu
552: testset:
553: nsize: 3
554: args: -f0 ${DATAFILESPATH}/matrices/medium
555: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
556: test:
557: suffix: 14
558: requires: spai
559: args: -pc_type spai
560: test:
561: suffix: 15
562: requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE)
563: args: -pc_type hypre -pc_hypre_type pilut
564: test:
565: suffix: 16
566: requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE)
567: args: -pc_type hypre -pc_hypre_type parasails
568: test:
569: suffix: 17
570: requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE)
571: args: -pc_type hypre -pc_hypre_type boomeramg
572: test:
573: suffix: 18
574: requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE)
575: args: -pc_type hypre -pc_hypre_type euclid
576: test:
577: suffix: 20
578: requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE)
579: args: -pc_type hypre -pc_hypre_type ilu
581: testset:
582: suffix: 19
583: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
584: args: -f0 ${DATAFILESPATH}/matrices/poisson1
585: args: -ksp_type cg -pc_type icc
586: args: -pc_factor_levels {{0 2 4}separate output}
587: test:
588: test:
589: args: -mat_type seqsbaij
591: testset:
592: suffix: ILU
593: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
594: args: -f0 ${DATAFILESPATH}/matrices/small
595: args: -pc_factor_levels 1
596: test:
597: test:
598: # This is tested against regular ILU (used to be denoted ILUBAIJ)
599: args: -mat_type baij
601: testset:
602: suffix: aijcusparse
603: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) cuda
604: args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_monitor -ksp_view -mat_view ascii::ascii_info -mat_type aijcusparse -pc_factor_mat_solver_type cusparse -pc_type ilu -vec_type cuda
606: testset:
607: TODO: No output file. Need to determine if deprecated
608: suffix: asm_viennacl
609: nsize: 2
610: requires: viennacl
611: args: -pc_type asm -pc_asm_sub_mat_type aijviennacl -f0 ${wPETSC_DIR}/share/petsc/datafiles/matrices/spd-real-int${PETSC_INDEX_SIZE}-float${PETSC_SCALAR_SIZE}
613: testset:
614: nsize: 2
615: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) hypre !defined(PETSC_HAVE_HYPRE_DEVICE)
616: args: -f0 ${DATAFILESPATH}/matrices/poisson2.gz -ksp_monitor -ksp_rtol 1.E-9 -pc_type hypre -pc_hypre_type boomeramg
617: test:
618: suffix: boomeramg_euclid
619: args: -pc_hypre_boomeramg_smooth_type Euclid -pc_hypre_boomeramg_smooth_num_levels 2 -pc_hypre_boomeramg_eu_level 1 -pc_hypre_boomeramg_eu_droptolerance 0.01
620: test:
621: suffix: boomeramg_euclid_bj
622: args: -pc_hypre_boomeramg_smooth_type Euclid -pc_hypre_boomeramg_smooth_num_levels 2 -pc_hypre_boomeramg_eu_level 1 -pc_hypre_boomeramg_eu_droptolerance 0.01 -pc_hypre_boomeramg_eu_bj
623: test:
624: suffix: boomeramg_parasails
625: args: -pc_hypre_boomeramg_smooth_type ParaSails -pc_hypre_boomeramg_smooth_num_levels 2
626: test:
627: suffix: boomeramg_pilut
628: args: -pc_hypre_boomeramg_smooth_type Pilut -pc_hypre_boomeramg_smooth_num_levels 2
629: test:
630: suffix: boomeramg_schwarz
631: args: -pc_hypre_boomeramg_smooth_type Schwarz-smoothers
633: testset:
634: suffix: cg_singlereduction
635: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
636: args: -f0 ${DATAFILESPATH}/matrices/small
637: args: -mat_type mpisbaij -ksp_type cg -pc_type eisenstat -ksp_monitor -ksp_converged_reason
638: test:
639: test:
640: args: -ksp_cg_single_reduction
642: testset:
643: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
644: args: -f0 ${DATAFILESPATH}/matrices/poisson2.gz
645: args: -ksp_monitor -pc_type icc
646: test:
647: suffix: cr
648: args: -ksp_type cr
649: test:
650: suffix: lcd
651: args: -ksp_type lcd
653: testset:
654: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
655: args: -f0 ${DATAFILESPATH}/matrices/small
656: args: -ksp_monitor -ksp_view -mat_view ascii::ascii_info
657: test:
658: suffix: seqaijcrl
659: args: -mat_type seqaijcrl
660: test:
661: suffix: seqaijperm
662: args: -mat_type seqaijperm
664: testset:
665: nsize: 2
666: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
667: args: -f0 ${DATAFILESPATH}/matrices/small
668: args: -ksp_monitor -ksp_view
669: # Different output files
670: test:
671: suffix: mpiaijcrl
672: args: -mat_type mpiaijcrl
673: test:
674: suffix: mpiaijperm
675: args: -mat_type mpiaijperm
677: testset:
678: nsize: 4
679: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) !defined(PETSC_HAVE_I_MPI)
680: args: -ksp_monitor -ksp_view
681: test:
682: suffix: xxt
683: args: -f0 ${DATAFILESPATH}/matrices/poisson1 -check_symmetry -check_scaling -ksp_type cg -pc_type tfs
684: test:
685: suffix: xyt
686: args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_type gmres -pc_type tfs
688: testset:
689: # The output file here is the same as mumps
690: suffix: mumps_cholesky
691: output_file: output/ex72_mumps.out
692: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps
693: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type cholesky -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2
694: nsize: {{1 2}}
695: test:
696: args: -mat_type sbaij -mat_ignore_lower_triangular
697: test:
698: args: -mat_type aij
699: test:
700: args: -mat_type aij -matload_spd
702: testset:
703: # The output file here is the same as mumps
704: suffix: mumps_lu
705: output_file: output/ex72_mumps.out
706: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps
707: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2
708: test:
709: args: -mat_type seqaij
710: test:
711: nsize: 2
712: args: -mat_type mpiaij
713: test:
714: args: -mat_type seqbaij -matload_block_size 2
715: test:
716: nsize: 2
717: args: -mat_type mpibaij -matload_block_size 2
718: test:
719: args: -mat_type aij -mat_mumps_icntl_7 5
720: TODO: Need to determine if deprecated
722: test:
723: suffix: mumps_lu_parmetis
724: output_file: output/ex72_mumps.out
725: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps parmetis
726: nsize: 2
727: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2 -mat_type mpiaij -mat_mumps_icntl_28 2 -mat_mumps_icntl_29 2
729: test:
730: suffix: mumps_lu_ptscotch
731: output_file: output/ex72_mumps.out
732: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps ptscotch
733: nsize: 2
734: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2 -mat_type mpiaij -mat_mumps_icntl_28 2 -mat_mumps_icntl_29 1
736: testset:
737: # The output file here is the same as mumps
738: suffix: mumps_redundant
739: output_file: output/ex72_mumps_redundant.out
740: nsize: 8
741: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps
742: args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_type preonly -pc_type redundant -pc_redundant_number {{8 7 6 5 4 3 2 1}} -redundant_pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2
744: testset:
745: suffix: pastix_cholesky
746: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix
747: output_file: output/ex72_mumps.out
748: nsize: {{1 2}}
749: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_factor_mat_solver_type pastix -num_numfac 2 -num_rhs 2 -pc_type cholesky -mat_type sbaij -mat_ignore_lower_triangular -mat_pastix_thread_nbr 1
751: testset:
752: suffix: pastix_lu
753: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix
754: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type pastix -num_numfac 2 -num_rhs 2 -mat_pastix_thread_nbr 1
755: output_file: output/ex72_mumps.out
756: test:
757: args: -mat_type seqaij
758: test:
759: nsize: 2
760: args: -mat_type mpiaij
762: testset:
763: suffix: pastix_redundant
764: output_file: output/ex72_mumps_redundant.out
765: nsize: 8
766: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix
767: args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_type preonly -pc_type redundant -pc_redundant_number {{8 7 6 5 4 3 2 1}} -redundant_pc_factor_mat_solver_type pastix -num_numfac 2 -num_rhs 2 -mat_pastix_thread_nbr 1
769: testset:
770: suffix: superlu_dist_lu
771: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu_dist
772: output_file: output/ex72_mumps.out
773: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type superlu_dist -num_numfac 2 -num_rhs 2
774: nsize: {{1 2}}
776: testset:
777: suffix: superlu_dist_redundant
778: nsize: 8
779: output_file: output/ex72_mumps_redundant.out
780: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu_dist
781: args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_type preonly -pc_type redundant -pc_redundant_number {{8 7 6 5 4 3 2 1}} -redundant_pc_factor_mat_solver_type superlu_dist -num_numfac 2 -num_rhs 2
783: testset:
784: suffix: superlu_lu
785: output_file: output/ex72_mumps.out
786: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu
787: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type superlu -num_numfac 2 -num_rhs 2
789: testset:
790: suffix: umfpack
791: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) suitesparse
792: args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -mat_type seqaij -pc_factor_mat_solver_type umfpack -num_numfac 2 -num_rhs 2
794: testset:
795: suffix: zeropivot
796: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
797: args: -f0 ${DATAFILESPATH}/matrices/small -test_zeropivot -ksp_converged_reason -ksp_type fgmres -pc_type ksp -fp_trap 0
798: test:
799: nsize: 3
800: args: -ksp_pc_type bjacobi
801: test:
802: nsize: 2
803: args: -ksp_ksp_type cg -ksp_pc_type bjacobi -ksp_pc_bjacobi_blocks 1
804: #test:
805: #nsize: 3
806: #args: -ksp_ksp_converged_reason -ksp_pc_type bjacobi -ksp_sub_ksp_converged_reason
807: #TODO: Need to determine if deprecated
809: testset:
810: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
811: args: -mat_convert_type is -f0 ${DATAFILESPATH}/matrices/medium -ksp_type fgmres
812: test:
813: suffix: aij_gdsw
814: nsize: 4
815: args: -mat_convert_type aij -pc_type mg -pc_mg_levels 2 -pc_mg_adapt_interp_coarse_space gdsw -pc_mg_galerkin -mg_levels_pc_type asm
816: test:
817: output_file: output/ex72_aij_gdsw.out
818: suffix: is_gdsw
819: nsize: 4
820: args: -pc_type mg -pc_mg_levels 2 -pc_mg_adapt_interp_coarse_space gdsw -pc_mg_galerkin -mg_levels_pc_type asm
821: test:
822: suffix: is_asm
823: nsize: {{1 2}separate output}
824: args: -pc_type asm
825: test:
826: suffix: bddc_seq
827: nsize: 1
828: args: -pc_type bddc
829: test:
830: suffix: bddc_par
831: nsize: 2
832: args: -pc_type bddc
833: test:
834: requires: parmetis
835: suffix: bddc_par_nd_parmetis
836: filter: sed -e "s/Number of iterations = [0-9]/Number of iterations = 9/g"
837: nsize: 4
838: args: -ksp_error_if_not_converged -pc_type bddc -mat_is_disassemble_l2g_type nd -mat_partitioning_type parmetis
839: test:
840: requires: ptscotch defined(PETSC_HAVE_SCOTCH_PARMETIS_V3_NODEND)
841: suffix: bddc_par_nd_ptscotch
842: filter: sed -e "s/Number of iterations = [0-9]/Number of iterations = 9/g"
843: nsize: 4
844: args: -ksp_error_if_not_converged -pc_type bddc -mat_is_disassemble_l2g_type nd -mat_partitioning_type ptscotch
846: testset:
847: requires: !__float128 hpddm slepc defined(PETSC_HAVE_DYNAMIC_LIBRARIES) defined(PETSC_USE_SHARED_LIBRARIES)
848: test:
849: suffix: hpddm_mat
850: output_file: output/ex72_bddc_seq.out
851: filter: sed -e "s/Number of iterations = 2/Number of iterations = 1/g"
852: nsize: 2
853: args: -f0 ${wPETSC_DIR}/share/petsc/datafiles/matrices/spd-real-int@PETSC_INDEX_SIZE@-float@PETSC_SCALAR_SIZE@ -pc_type hpddm -pc_hpddm_define_subdomains -pc_hpddm_levels_1_sub_pc_type cholesky -pc_hpddm_levels_1_eps_nev 5 -pc_hpddm_levels_1_st_pc_type mat
854: test:
855: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
856: suffix: hpddm_gen_non_hermitian
857: output_file: output/ex72_2.out
858: nsize: 4
859: args: -f0 ${DATAFILESPATH}/matrices/arco1 -pc_type hpddm -pc_hpddm_define_subdomains -pc_hpddm_levels_1_sub_pc_type lu -pc_hpddm_levels_1_eps_nev 10 -pc_hpddm_levels_1_st_share_sub_ksp -pc_hpddm_levels_1_eps_gen_non_hermitian -pc_hpddm_coarse_mat_type baij -pc_hpddm_block_splitting -pc_hpddm_levels_1_eps_threshold_absolute 0.7 -ksp_pc_side right
860: test:
861: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps !defined(PETSCTEST_VALGRIND)
862: suffix: hpddm_gen_non_hermitian_baij
863: output_file: output/ex72_10.out
864: nsize: 4
865: timeoutfactor: 2
866: args: -f0 ${DATAFILESPATH}/matrices/arco6 -pc_type hpddm -pc_hpddm_define_subdomains -pc_hpddm_levels_1_sub_pc_type lu -pc_hpddm_levels_1_eps_nev 30 -pc_hpddm_levels_1_st_share_sub_ksp -pc_hpddm_levels_1_eps_gen_non_hermitian -pc_hpddm_coarse_mat_type baij -pc_hpddm_block_splitting -pc_hpddm_levels_1_eps_threshold_absolute 0.8 -ksp_pc_side right -mat_type baij -pc_hpddm_levels_1_sub_pc_factor_mat_solver_type mumps -pc_hpddm_levels_1_eps_tol 1.0e-2 -ksp_monitor
867: test:
868: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
869: suffix: hpddm_too_much_oversampling
870: output_file: output/ex72_2.out
871: nsize: 2
872: filter: sed -e "s/Number of iterations = 3/Number of iterations = 10/g"
873: args: -f0 ${DATAFILESPATH}/matrices/small -pc_type hpddm -pc_hpddm_levels_1_svd_nsv 1 -pc_hpddm_levels_1_st_share_sub_ksp -pc_hpddm_levels_1_sub_pc_type lu -pc_hpddm_harmonic_overlap 3 -pc_hpddm_coarse_mat_type aij
875: # BDDC multiple subdomains per process tests
876: test:
877: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
878: suffix: matis_bddc_multisub_3d
879: nsize: {{1 2 3 4 5 6 7 8}}
880: args: -f ${DATAFILESPATH}/matrices/matis/poisson_DMDA_9x9x9_3x3x3.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is -pc_bddc_use_faces
882: test:
883: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
884: suffix: matis_bddc_multisub_2d
885: nsize: {{1 2 3 4 5 6 7 8}}
886: args: -f ${DATAFILESPATH}/matrices/matis/poisson_DMDA_9x9_3x3.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is
888: test:
889: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
890: suffix: matis_bddc_multisub_plex_2d
891: nsize: {{1 2 3 4 5 6 7 8}}
892: args: -f ${DATAFILESPATH}/matrices/matis/poisson_DMPLEX_32x32_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is
894: test:
895: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
896: suffix: matis_bddc_multisub_plex_3d
897: nsize: {{1 2 3 4 5 6 7 8}}
898: args: -f ${DATAFILESPATH}/matrices/matis/poisson_DMPLEX_16x16x16_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is
900: test:
901: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
902: suffix: matis_bddc_multisub_plex_3d_deluxe
903: nsize: {{1 2 3 4 5 6 7 8}}
904: args: -f ${DATAFILESPATH}/matrices/matis/poisson_DMPLEX_16x16x16_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is -pc_bddc_use_deluxe_scaling
906: test:
907: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
908: suffix: matis_bddc_multisub_hcurl_2d
909: nsize: {{1 2 3 4 5 6 7 8}}
910: args: -f ${DATAFILESPATH}/matrices/matis/hcurl_mfem_amrquad2_16.dat -pc_bddc_load ${DATAFILESPATH}/matrices/matis/bddc_hcurl_mfem_amrquad2_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is -pc_bddc_local_mat_graph_square 1
912: test:
913: requires: datafilespath double mumps !defined(PETSC_USE_64BIT_INDICES)
914: suffix: matis_bddc_multisub_hcurl_2d_adaptive
915: nsize: {{1 2 3 4 5 6 7 8}}
916: args: -f ${DATAFILESPATH}/matrices/matis/hcurl_mfem_amrquad2_16.dat -pc_bddc_load ${DATAFILESPATH}/matrices/matis/bddc_hcurl_mfem_amrquad2_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is -pc_bddc_local_mat_graph_square 1 -pc_bddc_use_deluxe_scaling -pc_bddc_adaptive_threshold 2 -pc_bddc_schur_exact {{0 1}}
918: test:
919: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
920: suffix: matis_bddc_multisub_hdiv_3d
921: nsize: {{1 2 3 4 5 6 7 8}}
922: args: -f ${DATAFILESPATH}/matrices/matis/hdiv_mfem_inlinehex2_16.dat -pc_bddc_load ${DATAFILESPATH}/matrices/matis/bddc_hdiv_mfem_inlinehex2_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is -pc_bddc_use_local_mat_graph 0
924: test:
925: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
926: suffix: matis_bddc_multisub_hcurl_3d
927: nsize: {{1 3 4 8}}
928: args: -f ${DATAFILESPATH}/matrices/matis/hcurl_mfem_inlinehex_16.dat -pc_bddc_load ${DATAFILESPATH}/matrices/matis/bddc_hcurl_mfem_inlinehex_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is -pc_bddc_local_mat_graph_square 1
930: test:
931: requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES)
932: suffix: matis_bddc_multisub_hcurl_3d_amr
933: nsize: {{1 3 4 8}}
934: args: -f ${DATAFILESPATH}/matrices/matis/hcurl_mfem_amrhex_16.dat -pc_bddc_load ${DATAFILESPATH}/matrices/matis/bddc_hcurl_mfem_amrhex_16.dat -pc_type bddc -ksp_type cg -ksp_norm_type natural -ksp_error_if_not_converged -mat_type is -pc_bddc_local_mat_graph_square 1
936: TEST*/