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 */ 23 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> 33 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]; 49 50 PetscFunctionBeginUser; 51 PetscCall(PetscInitialize(&argc, &args, (char *)0, 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)); 60 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 } 75 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"); 89 90 /* - - - - - - - - - - - New Stage - - - - - - - - - - - - - 91 Load system 92 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 93 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)); 99 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)); 106 107 PetscCall(PetscOptionsGetString(NULL, NULL, "-mat_convert_type", mtype, sizeof(mtype), &flg)); 108 if (flg) PetscCall(MatConvert(A, mtype, MAT_INPLACE_MATRIX, &A)); 109 110 if (nearnulldim) { 111 MatNullSpace nullsp; 112 Vec *nullvecs; 113 PetscInt i; 114 PetscCall(PetscMalloc1(nearnulldim, &nullvecs)); 115 for (i = 0; i < nearnulldim; i++) { 116 PetscCall(VecCreate(PETSC_COMM_WORLD, &nullvecs[i])); 117 PetscCall(VecLoad(nullvecs[i], viewer)); 118 } 119 PetscCall(MatNullSpaceCreate(PETSC_COMM_WORLD, PETSC_FALSE, nearnulldim, nullvecs, &nullsp)); 120 PetscCall(MatSetNearNullSpace(A, nullsp)); 121 for (i = 0; i < nearnulldim; i++) PetscCall(VecDestroy(&nullvecs[i])); 122 PetscCall(PetscFree(nullvecs)); 123 PetscCall(MatNullSpaceDestroy(&nullsp)); 124 } 125 if (constantnullspace) { 126 MatNullSpace constant; 127 PetscCall(MatNullSpaceCreate(PETSC_COMM_WORLD, PETSC_TRUE, 0, NULL, &constant)); 128 PetscCall(MatSetNullSpace(A, constant)); 129 PetscCall(MatNullSpaceDestroy(&constant)); 130 } 131 flg = PETSC_FALSE; 132 PetscCall(PetscOptionsGetString(NULL, NULL, "-rhs", file[2], sizeof(file[2]), &flg)); 133 PetscCall(VecCreate(PETSC_COMM_WORLD, &b)); 134 if (flg) { /* rhs is stored in a separate file */ 135 if (file[2][0] == '0' || file[2][0] == 0) { 136 PetscInt m; 137 PetscScalar one = 1.0; 138 PetscCall(PetscInfo(0, "Using vector of ones for RHS\n")); 139 PetscCall(MatGetLocalSize(A, &m, NULL)); 140 PetscCall(VecSetSizes(b, m, PETSC_DECIDE)); 141 PetscCall(VecSetFromOptions(b)); 142 PetscCall(VecSet(b, one)); 143 } else { 144 PetscCall(PetscViewerDestroy(&viewer)); 145 PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[2], FILE_MODE_READ, &viewer)); 146 PetscCall(VecSetFromOptions(b)); 147 PetscCall(VecLoad(b, viewer)); 148 } 149 } else { /* rhs is stored in the same file as matrix */ 150 PetscCall(VecSetFromOptions(b)); 151 PetscCall(VecLoad(b, viewer)); 152 } 153 PetscCall(PetscViewerDestroy(&viewer)); 154 155 /* Make A singular for testing zero-pivot of ilu factorization */ 156 /* Example: ./ex72 -f0 <datafile> -test_zeropivot -pc_factor_shift_type <shift_type> */ 157 flg = PETSC_FALSE; 158 PetscCall(PetscOptionsGetBool(NULL, NULL, "-test_zeropivot", &flg, NULL)); 159 if (flg) { /* set a row as zeros */ 160 PetscInt row = 0; 161 PetscCall(MatSetOption(A, MAT_KEEP_NONZERO_PATTERN, PETSC_TRUE)); 162 PetscCall(MatZeroRows(A, 1, &row, 0.0, NULL, NULL)); 163 } 164 165 /* Check whether A is symmetric, then set A->symmetric option */ 166 flg = PETSC_FALSE; 167 PetscCall(PetscOptionsGetBool(NULL, NULL, "-check_symmetry", &flg, NULL)); 168 if (flg) { 169 PetscCall(MatIsSymmetric(A, 0.0, &isSymmetric)); 170 if (!isSymmetric) PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Warning: A is non-symmetric \n")); 171 } 172 173 /* 174 If the loaded matrix is larger than the vector (due to being padded 175 to match the block size of the system), then create a new padded vector. 176 */ 177 178 PetscCall(MatGetLocalSize(A, NULL, &n)); 179 PetscCall(MatGetSize(A, &M, NULL)); 180 PetscCall(VecGetSize(b, &m)); 181 PetscCall(VecGetLocalSize(b, &p)); 182 preload = (PetscBool)(M != m || p != n); /* Global or local dimension mismatch */ 183 PetscCall(MPIU_Allreduce(&preload, &flg, 1, MPIU_BOOL, MPI_LOR, PetscObjectComm((PetscObject)A))); 184 if (flg) { /* Create a new vector b by padding the old one */ 185 PetscInt j, mvec, start, end, indx; 186 Vec tmp; 187 PetscScalar *bold; 188 189 PetscCall(VecCreate(PETSC_COMM_WORLD, &tmp)); 190 PetscCall(VecSetSizes(tmp, n, PETSC_DECIDE)); 191 PetscCall(VecSetFromOptions(tmp)); 192 PetscCall(VecGetOwnershipRange(b, &start, &end)); 193 PetscCall(VecGetLocalSize(b, &mvec)); 194 PetscCall(VecGetArray(b, &bold)); 195 for (j = 0; j < mvec; j++) { 196 indx = start + j; 197 PetscCall(VecSetValues(tmp, 1, &indx, bold + j, INSERT_VALUES)); 198 } 199 PetscCall(VecRestoreArray(b, &bold)); 200 PetscCall(VecDestroy(&b)); 201 PetscCall(VecAssemblyBegin(tmp)); 202 PetscCall(VecAssemblyEnd(tmp)); 203 b = tmp; 204 } 205 206 PetscCall(MatCreateVecs(A, &x, NULL)); 207 PetscCall(VecDuplicate(b, &u)); 208 if (initialguessfile) { 209 PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, initialguessfilename, FILE_MODE_READ, &viewer)); 210 PetscCall(VecLoad(x, viewer)); 211 PetscCall(PetscViewerDestroy(&viewer)); 212 initialguess = PETSC_TRUE; 213 } else if (initialguess) { 214 PetscCall(VecSet(x, 1.0)); 215 } else { 216 PetscCall(VecSet(x, 0.0)); 217 } 218 219 /* Check scaling in A */ 220 flg = PETSC_FALSE; 221 PetscCall(PetscOptionsGetBool(NULL, NULL, "-check_scaling", &flg, NULL)); 222 if (flg) { 223 Vec max, min, l1; 224 PetscInt idx; 225 PetscReal val; 226 227 PetscCall(VecDuplicate(x, &max)); 228 PetscCall(VecDuplicate(x, &min)); 229 PetscCall(VecDuplicate(x, &l1)); 230 PetscCall(MatGetRowMaxAbs(A, max, NULL)); 231 PetscCall(MatGetRowMinAbs(A, min, NULL)); 232 PetscCall(MatGetRowSumAbs(A, l1)); 233 if (PETSC_FALSE) { 234 PetscCall(PetscViewerASCIIOpen(PETSC_COMM_WORLD, "max.data", &viewer)); 235 PetscCall(VecView(max, viewer)); 236 PetscCall(PetscViewerDestroy(&viewer)); 237 PetscCall(PetscViewerASCIIOpen(PETSC_COMM_WORLD, "min.data", &viewer)); 238 PetscCall(VecView(min, viewer)); 239 PetscCall(PetscViewerDestroy(&viewer)); 240 PetscCall(PetscViewerASCIIOpen(PETSC_COMM_WORLD, "l1.data", &viewer)); 241 PetscCall(VecView(l1, viewer)); 242 PetscCall(PetscViewerDestroy(&viewer)); 243 } 244 PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD)); 245 PetscCall(VecMax(max, &idx, &val)); 246 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest max row element %g at row %" PetscInt_FMT "\n", (double)val, idx)); 247 PetscCall(VecView(min, PETSC_VIEWER_DRAW_WORLD)); 248 PetscCall(VecMin(min, &idx, &val)); 249 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Smallest min row element %g at row %" PetscInt_FMT "\n", (double)val, idx)); 250 PetscCall(VecMin(max, &idx, &val)); 251 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Smallest max row element %g at row %" PetscInt_FMT "\n", (double)val, idx)); 252 PetscCall(VecPointwiseDivide(max, max, min)); 253 PetscCall(VecMax(max, &idx, &val)); 254 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest row ratio %g at row %" PetscInt_FMT "\n", (double)val, idx)); 255 PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD)); 256 PetscCall(VecMax(max, &idx, &val)); 257 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest row ratio %g at row %" PetscInt_FMT "\n", (double)val, idx)); 258 PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD)); 259 PetscCall(VecView(max, PETSC_VIEWER_DRAW_WORLD)); 260 PetscCall(VecMax(l1, &idx, &val)); 261 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Largest l1 row element %g at row %" PetscInt_FMT "\n", (double)val, idx)); 262 PetscCall(VecDestroy(&max)); 263 PetscCall(VecDestroy(&min)); 264 PetscCall(VecDestroy(&l1)); 265 } 266 267 /* PetscCall(MatView(A,PETSC_VIEWER_STDOUT_WORLD)); */ 268 /* - - - - - - - - - - - New Stage - - - - - - - - - - - - - 269 Setup solve for system 270 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 271 /* 272 Conclude profiling last stage; begin profiling next stage. 273 */ 274 PetscPreLoadStage("KSPSetUpSolve"); 275 276 /* 277 Create linear solver; set operators; set runtime options. 278 */ 279 PetscCall(KSPCreate(PETSC_COMM_WORLD, &ksp)); 280 PetscCall(KSPSetInitialGuessNonzero(ksp, initialguess)); 281 num_numfac = 1; 282 PetscCall(PetscOptionsGetInt(NULL, NULL, "-num_numfac", &num_numfac, NULL)); 283 while (num_numfac--) { 284 PC pc; 285 PetscBool lsqr, isbddc, ismatis; 286 char str[32]; 287 288 PetscCall(PetscOptionsGetString(NULL, NULL, "-ksp_type", str, sizeof(str), &lsqr)); 289 if (lsqr) PetscCall(PetscStrcmp("lsqr", str, &lsqr)); 290 if (lsqr) { 291 Mat BtB; 292 PetscCall(MatTransposeMatMult(A, A, MAT_INITIAL_MATRIX, 4, &BtB)); 293 PetscCall(KSPSetOperators(ksp, A, BtB)); 294 PetscCall(MatDestroy(&BtB)); 295 } else { 296 PetscCall(KSPSetOperators(ksp, A, A)); 297 } 298 PetscCall(KSPSetFromOptions(ksp)); 299 300 /* if we test BDDC, make sure pmat is of type MATIS */ 301 PetscCall(KSPGetPC(ksp, &pc)); 302 PetscCall(PetscObjectTypeCompare((PetscObject)pc, PCBDDC, &isbddc)); 303 PetscCall(PetscObjectTypeCompare((PetscObject)A, MATIS, &ismatis)); 304 if (isbddc && !ismatis) { 305 Mat J; 306 307 PetscCall(MatConvert(A, MATIS, MAT_INITIAL_MATRIX, &J)); 308 PetscCall(KSPSetOperators(ksp, A, J)); 309 PetscCall(MatDestroy(&J)); 310 } 311 312 /* 313 Here we explicitly call KSPSetUp() and KSPSetUpOnBlocks() to 314 enable more precise profiling of setting up the preconditioner. 315 These calls are optional, since both will be called within 316 KSPSolve() if they haven't been called already. 317 */ 318 PetscCall(KSPSetUp(ksp)); 319 PetscCall(KSPSetUpOnBlocks(ksp)); 320 321 /* - - - - - - - - - - - New Stage - - - - - - - - - - - - - 322 Solve system 323 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 324 325 /* 326 Solve linear system; 327 */ 328 if (trans) { 329 PetscCall(KSPSolveTranspose(ksp, b, x)); 330 PetscCall(KSPGetIterationNumber(ksp, &its)); 331 } else { 332 PetscInt num_rhs = 1; 333 PetscCall(PetscOptionsGetInt(NULL, NULL, "-num_rhs", &num_rhs, NULL)); 334 cknorm = PETSC_FALSE; 335 PetscCall(PetscOptionsGetBool(NULL, NULL, "-cknorm", &cknorm, NULL)); 336 while (num_rhs--) { 337 if (num_rhs == 1) PetscCall(VecSet(x, 0.0)); 338 PetscCall(KSPSolve(ksp, b, x)); 339 } 340 PetscCall(KSPGetIterationNumber(ksp, &its)); 341 if (cknorm) { /* Check error for each rhs */ 342 if (trans) { 343 PetscCall(MatMultTranspose(A, x, u)); 344 } else { 345 PetscCall(MatMult(A, x, u)); 346 } 347 PetscCall(VecAXPY(u, -1.0, b)); 348 PetscCall(VecNorm(u, NORM_2, &norm)); 349 PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Number of iterations = %3" PetscInt_FMT "\n", its)); 350 if (!PetscIsNanScalar(norm)) { 351 if (norm < 1.e-12) { 352 PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Residual norm < 1.e-12\n")); 353 } else { 354 PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Residual norm %g\n", (double)norm)); 355 } 356 } 357 } 358 } /* while (num_rhs--) */ 359 360 /* - - - - - - - - - - - New Stage - - - - - - - - - - - - - 361 Check error, print output, free data structures. 362 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 363 364 /* 365 Check error 366 */ 367 if (trans) { 368 PetscCall(MatMultTranspose(A, x, u)); 369 } else { 370 PetscCall(MatMult(A, x, u)); 371 } 372 PetscCall(VecAXPY(u, -1.0, b)); 373 PetscCall(VecNorm(u, NORM_2, &norm)); 374 /* 375 Write output (optionally using table for solver details). 376 - PetscPrintf() handles output for multiprocessor jobs 377 by printing from only one processor in the communicator. 378 - KSPView() prints information about the linear solver. 379 */ 380 if (table) { 381 char *matrixname = NULL, kspinfo[120]; 382 383 /* 384 Open a string viewer; then write info to it. 385 */ 386 PetscCall(PetscViewerStringOpen(PETSC_COMM_WORLD, kspinfo, sizeof(kspinfo), &viewer)); 387 PetscCall(KSPView(ksp, viewer)); 388 PetscCall(PetscStrrchr(file[PetscPreLoadIt], '/', &matrixname)); 389 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "%-8.8s %3" PetscInt_FMT " %2.0e %s \n", matrixname, its, (double)norm, kspinfo)); 390 391 /* 392 Destroy the viewer 393 */ 394 PetscCall(PetscViewerDestroy(&viewer)); 395 } else { 396 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Number of iterations = %3" PetscInt_FMT "\n", its)); 397 if (!PetscIsNanScalar(norm)) { 398 if (norm < 1.e-12 && !PetscIsNanScalar((PetscScalar)norm)) { 399 PetscCall(PetscPrintf(PETSC_COMM_WORLD, " Residual norm < 1.e-12\n")); 400 } else { 401 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Residual norm %g\n", (double)norm)); 402 } 403 } 404 } 405 PetscCall(PetscOptionsGetString(NULL, NULL, "-solution", file[3], sizeof(file[3]), &flg)); 406 if (flg) { 407 Vec xstar; 408 PetscReal norm; 409 410 PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, file[3], FILE_MODE_READ, &viewer)); 411 PetscCall(VecCreate(PETSC_COMM_WORLD, &xstar)); 412 PetscCall(VecLoad(xstar, viewer)); 413 PetscCall(VecAXPY(xstar, -1.0, x)); 414 PetscCall(VecNorm(xstar, NORM_2, &norm)); 415 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Error norm %g\n", (double)norm)); 416 PetscCall(VecDestroy(&xstar)); 417 PetscCall(PetscViewerDestroy(&viewer)); 418 } 419 if (outputSoln) { 420 PetscCall(PetscViewerBinaryOpen(PETSC_COMM_WORLD, "solution.petsc", FILE_MODE_WRITE, &viewer)); 421 PetscCall(VecView(x, viewer)); 422 PetscCall(PetscViewerDestroy(&viewer)); 423 } 424 425 flg = PETSC_FALSE; 426 PetscCall(PetscOptionsGetBool(NULL, NULL, "-ksp_reason", &flg, NULL)); 427 if (flg) { 428 KSPConvergedReason reason; 429 PetscCall(KSPGetConvergedReason(ksp, &reason)); 430 PetscCall(PetscPrintf(PETSC_COMM_WORLD, "KSPConvergedReason: %s\n", KSPConvergedReasons[reason])); 431 } 432 433 } /* while (num_numfac--) */ 434 435 /* 436 Free work space. All PETSc objects should be destroyed when they 437 are no longer needed. 438 */ 439 PetscCall(MatDestroy(&A)); 440 PetscCall(VecDestroy(&b)); 441 PetscCall(VecDestroy(&u)); 442 PetscCall(VecDestroy(&x)); 443 PetscCall(KSPDestroy(&ksp)); 444 PetscPreLoadEnd(); 445 /* ----------------------------------------------------------- 446 End of linear solver loop 447 ----------------------------------------------------------- */ 448 449 PetscCall(PetscFinalize()); 450 return 0; 451 } 452 453 /*TEST 454 455 build: 456 requires: !complex 457 458 testset: 459 suffix: 1 460 nsize: 2 461 args: -f0 ${wPETSC_DIR}/share/petsc/datafiles/matrices/spd-real-int@PETSC_INDEX_SIZE@-float@PETSC_SCALAR_SIZE@ 462 requires: !__float128 463 464 testset: 465 suffix: 1a 466 args: -f0 ${wPETSC_DIR}/share/petsc/datafiles/matrices/spd-real-int@PETSC_INDEX_SIZE@-float@PETSC_SCALAR_SIZE@ 467 requires: !__float128 468 469 testset: 470 nsize: 2 471 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 472 args: -f0 ${DATAFILESPATH}/matrices/medium 473 args: -ksp_type bicg 474 test: 475 suffix: 2 476 477 testset: 478 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 479 args: -f0 ${DATAFILESPATH}/matrices/medium 480 args: -ksp_type bicg 481 test: 482 suffix: 4 483 args: -pc_type lu 484 test: 485 suffix: 5 486 487 testset: 488 suffix: 6 489 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 490 args: -f0 ${DATAFILESPATH}/matrices/fem1 491 args: -pc_factor_levels 2 -pc_factor_fill 1.73 -ksp_gmres_cgs_refinement_type refine_always 492 493 testset: 494 TODO: Matrix row/column sizes are not compatible with block size 495 suffix: 7 496 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 497 args: -f0 ${DATAFILESPATH}/matrices/medium 498 args: -viewer_binary_skip_info -mat_type seqbaij 499 args: -matload_block_size {{2 3 4 5 6 7 8}separate output} 500 args: -ksp_max_it 100 -ksp_gmres_cgs_refinement_type refine_always 501 args: -ksp_rtol 1.0e-15 -ksp_monitor_short 502 test: 503 suffix: a 504 test: 505 suffix: b 506 args: -pc_factor_mat_ordering_type nd 507 test: 508 suffix: c 509 args: -pc_factor_levels 1 510 test: 511 requires: metis 512 suffix: d 513 args: -pc_factor_mat_ordering_type metisnd 514 515 testset: 516 TODO: Matrix row/column sizes are not compatible with block size 517 suffix: 7_d 518 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 519 args: -f0 ${DATAFILESPATH}/matrices/medium 520 args: -viewer_binary_skip_info -mat_type seqbaij 521 args: -matload_block_size {{2 3 4 5 6 7 8}shared output} 522 args: -ksp_type preonly -pc_type lu 523 524 testset: 525 suffix: 8 526 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 527 args: -f0 ${DATAFILESPATH}/matrices/medium 528 args: -ksp_diagonal_scale -pc_type eisenstat -ksp_monitor_short -ksp_diagonal_scale_fix -ksp_gmres_cgs_refinement_type refine_always -mat_no_inode 529 530 testset: 531 TODO: Matrix row/column sizes are not compatible with block size 532 suffix: 9 533 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 534 args: -f0 ${DATAFILESPATH}/matrices/medium 535 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_short 536 test: 537 suffix: a 538 args: -mat_type seqbaij 539 test: 540 suffix: b 541 args: -mat_type seqbaij -trans 542 test: 543 suffix: c 544 nsize: 2 545 args: -mat_type mpibaij 546 test: 547 suffix: d 548 nsize: 2 549 args: -mat_type mpibaij -trans 550 test: 551 suffix: e 552 nsize: 3 553 args: -mat_type mpibaij 554 test: 555 suffix: f 556 nsize: 3 557 args: -mat_type mpibaij -trans 558 559 testset: 560 suffix: 10 561 nsize: 2 562 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 563 args: -ksp_type fgmres -pc_type ksp -f0 ${DATAFILESPATH}/matrices/medium -ksp_fgmres_modifypcksp -ksp_monitor_short 564 565 testset: 566 suffix: 12 567 requires: datafilespath matlab 568 args: -pc_type lu -pc_factor_mat_solver_type matlab -f0 ${DATAFILESPATH}/matrices/arco1 569 570 testset: 571 suffix: 13 572 requires: datafilespath lusol 573 args: -f0 ${DATAFILESPATH}/matrices/arco1 574 args: -mat_type lusol -pc_type lu 575 576 testset: 577 nsize: 3 578 args: -f0 ${DATAFILESPATH}/matrices/medium 579 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 580 test: 581 suffix: 14 582 requires: spai 583 args: -pc_type spai 584 test: 585 suffix: 15 586 requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE) 587 args: -pc_type hypre -pc_hypre_type pilut 588 test: 589 suffix: 16 590 requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE) 591 args: -pc_type hypre -pc_hypre_type parasails 592 test: 593 suffix: 17 594 requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE) 595 args: -pc_type hypre -pc_hypre_type boomeramg 596 test: 597 suffix: 18 598 requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE) 599 args: -pc_type hypre -pc_hypre_type euclid 600 601 testset: 602 suffix: 19 603 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 604 args: -f0 ${DATAFILESPATH}/matrices/poisson1 605 args: -ksp_type cg -pc_type icc 606 args: -pc_factor_levels {{0 2 4}separate output} 607 test: 608 test: 609 args: -mat_type seqsbaij 610 611 testset: 612 suffix: ILU 613 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 614 args: -f0 ${DATAFILESPATH}/matrices/small 615 args: -pc_factor_levels 1 616 test: 617 test: 618 # This is tested against regular ILU (used to be denoted ILUBAIJ) 619 args: -mat_type baij 620 621 testset: 622 suffix: aijcusparse 623 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) cuda 624 args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_monitor_short -ksp_view -mat_view ascii::ascii_info -mat_type aijcusparse -pc_factor_mat_solver_type cusparse -pc_type ilu -vec_type cuda 625 626 testset: 627 TODO: No output file. Need to determine if deprecated 628 suffix: asm_viennacl 629 nsize: 2 630 requires: viennacl 631 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} 632 633 testset: 634 nsize: 2 635 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) hypre !defined(PETSC_HAVE_HYPRE_DEVICE) 636 args: -f0 ${DATAFILESPATH}/matrices/poisson2.gz -ksp_monitor_short -ksp_rtol 1.E-9 -pc_type hypre -pc_hypre_type boomeramg 637 test: 638 suffix: boomeramg_euclid 639 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 640 test: 641 suffix: boomeramg_euclid_bj 642 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 643 test: 644 suffix: boomeramg_parasails 645 args: -pc_hypre_boomeramg_smooth_type ParaSails -pc_hypre_boomeramg_smooth_num_levels 2 646 test: 647 suffix: boomeramg_pilut 648 args: -pc_hypre_boomeramg_smooth_type Pilut -pc_hypre_boomeramg_smooth_num_levels 2 649 test: 650 suffix: boomeramg_schwarz 651 args: -pc_hypre_boomeramg_smooth_type Schwarz-smoothers 652 653 testset: 654 suffix: cg_singlereduction 655 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 656 args: -f0 ${DATAFILESPATH}/matrices/small 657 args: -mat_type mpisbaij -ksp_type cg -pc_type eisenstat -ksp_monitor_short -ksp_converged_reason 658 test: 659 test: 660 args: -ksp_cg_single_reduction 661 662 testset: 663 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 664 args: -f0 ${DATAFILESPATH}/matrices/poisson2.gz 665 args: -ksp_monitor_short -pc_type icc 666 test: 667 suffix: cr 668 args: -ksp_type cr 669 test: 670 suffix: lcd 671 args: -ksp_type lcd 672 673 testset: 674 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 675 args: -f0 ${DATAFILESPATH}/matrices/small 676 args: -ksp_monitor_short -ksp_view -mat_view ascii::ascii_info 677 test: 678 suffix: seqaijcrl 679 args: -mat_type seqaijcrl 680 test: 681 suffix: seqaijperm 682 args: -mat_type seqaijperm 683 684 testset: 685 nsize: 2 686 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 687 args: -f0 ${DATAFILESPATH}/matrices/small 688 args: -ksp_monitor_short -ksp_view 689 # Different output files 690 test: 691 suffix: mpiaijcrl 692 args: -mat_type mpiaijcrl 693 test: 694 suffix: mpiaijperm 695 args: -mat_type mpiaijperm 696 697 testset: 698 nsize: 4 699 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) !defined(PETSC_HAVE_I_MPI_NUMVERSION) 700 args: -ksp_monitor_short -ksp_view 701 test: 702 suffix: xxt 703 args: -f0 ${DATAFILESPATH}/matrices/poisson1 -check_symmetry -check_scaling -ksp_type cg -pc_type tfs 704 test: 705 suffix: xyt 706 args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_type gmres -pc_type tfs 707 708 testset: 709 # The output file here is the same as mumps 710 suffix: mumps_cholesky 711 output_file: output/ex72_mumps.out 712 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps 713 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type cholesky -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2 714 nsize: {{1 2}} 715 test: 716 args: -mat_type sbaij -mat_ignore_lower_triangular 717 test: 718 args: -mat_type aij 719 test: 720 args: -mat_type aij -matload_spd 721 722 testset: 723 # The output file here is the same as mumps 724 suffix: mumps_lu 725 output_file: output/ex72_mumps.out 726 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps 727 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2 728 test: 729 args: -mat_type seqaij 730 test: 731 nsize: 2 732 args: -mat_type mpiaij 733 test: 734 args: -mat_type seqbaij -matload_block_size 2 735 test: 736 nsize: 2 737 args: -mat_type mpibaij -matload_block_size 2 738 test: 739 args: -mat_type aij -mat_mumps_icntl_7 5 740 TODO: Need to determine if deprecated 741 742 test: 743 suffix: mumps_lu_parmetis 744 output_file: output/ex72_mumps.out 745 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps parmetis 746 nsize: 2 747 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 748 749 test: 750 suffix: mumps_lu_ptscotch 751 output_file: output/ex72_mumps.out 752 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps ptscotch 753 nsize: 2 754 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 755 756 testset: 757 # The output file here is the same as mumps 758 suffix: mumps_redundant 759 output_file: output/ex72_mumps_redundant.out 760 nsize: 8 761 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps 762 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 763 764 testset: 765 suffix: pastix_cholesky 766 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix 767 output_file: output/ex72_mumps.out 768 nsize: {{1 2}} 769 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 770 771 testset: 772 suffix: pastix_lu 773 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix 774 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type pastix -num_numfac 2 -num_rhs 2 775 output_file: output/ex72_mumps.out 776 test: 777 args: -mat_type seqaij 778 test: 779 nsize: 2 780 args: -mat_type mpiaij 781 782 testset: 783 suffix: pastix_redundant 784 output_file: output/ex72_mumps_redundant.out 785 nsize: 8 786 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix 787 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 788 789 testset: 790 suffix: superlu_dist_lu 791 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu_dist 792 output_file: output/ex72_mumps.out 793 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type superlu_dist -num_numfac 2 -num_rhs 2 794 nsize: {{1 2}} 795 796 testset: 797 suffix: superlu_dist_redundant 798 nsize: 8 799 output_file: output/ex72_mumps_redundant.out 800 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu_dist 801 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 802 803 testset: 804 suffix: superlu_lu 805 output_file: output/ex72_mumps.out 806 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu 807 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type superlu -num_numfac 2 -num_rhs 2 808 809 testset: 810 suffix: umfpack 811 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) suitesparse 812 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 813 814 testset: 815 suffix: zeropivot 816 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 817 args: -f0 ${DATAFILESPATH}/matrices/small -test_zeropivot -ksp_converged_reason -ksp_type fgmres -pc_type ksp -fp_trap 0 818 test: 819 nsize: 3 820 args: -ksp_pc_type bjacobi 821 test: 822 nsize: 2 823 args: -ksp_ksp_type cg -ksp_pc_type bjacobi -ksp_pc_bjacobi_blocks 1 824 #test: 825 #nsize: 3 826 #args: -ksp_ksp_converged_reason -ksp_pc_type bjacobi -ksp_sub_ksp_converged_reason 827 #TODO: Need to determine if deprecated 828 829 testset: 830 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 831 args: -mat_convert_type is -f0 ${DATAFILESPATH}/matrices/medium -ksp_type fgmres 832 test: 833 suffix: aij_gdsw 834 nsize: 4 835 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 836 test: 837 output_file: output/ex72_aij_gdsw.out 838 suffix: is_gdsw 839 nsize: 4 840 args: -pc_type mg -pc_mg_levels 2 -pc_mg_adapt_interp_coarse_space gdsw -pc_mg_galerkin -mg_levels_pc_type asm 841 test: 842 suffix: is_asm 843 nsize: {{1 2}separate output} 844 args: -pc_type asm 845 test: 846 suffix: bddc_seq 847 nsize: 1 848 args: -pc_type bddc 849 test: 850 suffix: bddc_par 851 nsize: 2 852 args: -pc_type bddc 853 test: 854 requires: parmetis 855 suffix: bddc_par_nd_parmetis 856 filter: sed -e "s/Number of iterations = [0-9]/Number of iterations = 9/g" 857 nsize: 4 858 args: -ksp_error_if_not_converged -pc_type bddc -mat_is_disassemble_l2g_type nd -mat_partitioning_type parmetis 859 test: 860 requires: ptscotch defined(PETSC_HAVE_SCOTCH_PARMETIS_V3_NODEND) 861 suffix: bddc_par_nd_ptscotch 862 filter: sed -e "s/Number of iterations = [0-9]/Number of iterations = 9/g" 863 nsize: 4 864 args: -ksp_error_if_not_converged -pc_type bddc -mat_is_disassemble_l2g_type nd -mat_partitioning_type ptscotch 865 866 testset: 867 requires: !__float128 hpddm slepc defined(PETSC_HAVE_DYNAMIC_LIBRARIES) defined(PETSC_USE_SHARED_LIBRARIES) 868 test: 869 suffix: hpddm_mat 870 output_file: output/ex72_bddc_seq.out 871 filter: sed -e "s/Number of iterations = 2/Number of iterations = 1/g" 872 nsize: 2 873 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 874 test: 875 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 876 suffix: hpddm_gen_non_hermitian 877 output_file: output/ex72_2.out 878 nsize: 4 879 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 0.7 -ksp_pc_side right 880 test: 881 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps !defined(PETSCTEST_VALGRIND) 882 suffix: hpddm_gen_non_hermitian_baij 883 output_file: output/ex72_10.out 884 nsize: 4 885 timeoutfactor: 2 886 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 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_short 887 888 # BDDC multiple subdomains per process tests 889 test: 890 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 891 suffix: matis_bddc_multisub_3d 892 nsize: {{1 2 3 4 5 6 7 8}} 893 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 894 895 test: 896 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 897 suffix: matis_bddc_multisub_2d 898 nsize: {{1 2 3 4 5 6 7 8}} 899 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 900 901 test: 902 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 903 suffix: matis_bddc_multisub_plex_2d 904 nsize: {{1 2 3 4 5 6 7 8}} 905 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 906 907 test: 908 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 909 suffix: matis_bddc_multisub_plex_3d 910 nsize: {{1 2 3 4 5 6 7 8}} 911 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 912 913 test: 914 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 915 suffix: matis_bddc_multisub_hcurl_2d 916 nsize: {{1 2 3 4 5 6 7 8}} 917 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 918 919 test: 920 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 921 suffix: matis_bddc_multisub_hdiv_3d 922 nsize: {{1 2 3 4 5 6 7 8}} 923 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 925 # These two tests slightly depend on the number of processes since the 926 # the Nedelec 3D support is not completely independent on the decomposition 927 test: 928 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 929 suffix: matis_bddc_multisub_hcurl_3d 930 nsize: {{1 3 4 8}separate output} 931 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 932 933 test: 934 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 935 suffix: matis_bddc_multisub_hcurl_3d_amr 936 nsize: {{1 3 4 8}separate output} 937 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 938 939 TEST*/ 940