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 test: 601 suffix: 20 602 requires: hypre !defined(PETSC_HAVE_HYPRE_DEVICE) 603 args: -pc_type hypre -pc_hypre_type ilu 604 605 testset: 606 suffix: 19 607 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 608 args: -f0 ${DATAFILESPATH}/matrices/poisson1 609 args: -ksp_type cg -pc_type icc 610 args: -pc_factor_levels {{0 2 4}separate output} 611 test: 612 test: 613 args: -mat_type seqsbaij 614 615 testset: 616 suffix: ILU 617 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 618 args: -f0 ${DATAFILESPATH}/matrices/small 619 args: -pc_factor_levels 1 620 test: 621 test: 622 # This is tested against regular ILU (used to be denoted ILUBAIJ) 623 args: -mat_type baij 624 625 testset: 626 suffix: aijcusparse 627 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) cuda 628 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 629 630 testset: 631 TODO: No output file. Need to determine if deprecated 632 suffix: asm_viennacl 633 nsize: 2 634 requires: viennacl 635 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} 636 637 testset: 638 nsize: 2 639 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) hypre !defined(PETSC_HAVE_HYPRE_DEVICE) 640 args: -f0 ${DATAFILESPATH}/matrices/poisson2.gz -ksp_monitor_short -ksp_rtol 1.E-9 -pc_type hypre -pc_hypre_type boomeramg 641 test: 642 suffix: boomeramg_euclid 643 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 644 test: 645 suffix: boomeramg_euclid_bj 646 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 647 test: 648 suffix: boomeramg_parasails 649 args: -pc_hypre_boomeramg_smooth_type ParaSails -pc_hypre_boomeramg_smooth_num_levels 2 650 test: 651 suffix: boomeramg_pilut 652 args: -pc_hypre_boomeramg_smooth_type Pilut -pc_hypre_boomeramg_smooth_num_levels 2 653 test: 654 suffix: boomeramg_schwarz 655 args: -pc_hypre_boomeramg_smooth_type Schwarz-smoothers 656 657 testset: 658 suffix: cg_singlereduction 659 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 660 args: -f0 ${DATAFILESPATH}/matrices/small 661 args: -mat_type mpisbaij -ksp_type cg -pc_type eisenstat -ksp_monitor_short -ksp_converged_reason 662 test: 663 test: 664 args: -ksp_cg_single_reduction 665 666 testset: 667 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 668 args: -f0 ${DATAFILESPATH}/matrices/poisson2.gz 669 args: -ksp_monitor_short -pc_type icc 670 test: 671 suffix: cr 672 args: -ksp_type cr 673 test: 674 suffix: lcd 675 args: -ksp_type lcd 676 677 testset: 678 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 679 args: -f0 ${DATAFILESPATH}/matrices/small 680 args: -ksp_monitor_short -ksp_view -mat_view ascii::ascii_info 681 test: 682 suffix: seqaijcrl 683 args: -mat_type seqaijcrl 684 test: 685 suffix: seqaijperm 686 args: -mat_type seqaijperm 687 688 testset: 689 nsize: 2 690 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 691 args: -f0 ${DATAFILESPATH}/matrices/small 692 args: -ksp_monitor_short -ksp_view 693 # Different output files 694 test: 695 suffix: mpiaijcrl 696 args: -mat_type mpiaijcrl 697 test: 698 suffix: mpiaijperm 699 args: -mat_type mpiaijperm 700 701 testset: 702 nsize: 4 703 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) !defined(PETSC_HAVE_I_MPI) 704 args: -ksp_monitor_short -ksp_view 705 test: 706 suffix: xxt 707 args: -f0 ${DATAFILESPATH}/matrices/poisson1 -check_symmetry -check_scaling -ksp_type cg -pc_type tfs 708 test: 709 suffix: xyt 710 args: -f0 ${DATAFILESPATH}/matrices/medium -ksp_type gmres -pc_type tfs 711 712 testset: 713 # The output file here is the same as mumps 714 suffix: mumps_cholesky 715 output_file: output/ex72_mumps.out 716 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps 717 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type cholesky -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2 718 nsize: {{1 2}} 719 test: 720 args: -mat_type sbaij -mat_ignore_lower_triangular 721 test: 722 args: -mat_type aij 723 test: 724 args: -mat_type aij -matload_spd 725 726 testset: 727 # The output file here is the same as mumps 728 suffix: mumps_lu 729 output_file: output/ex72_mumps.out 730 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps 731 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type mumps -num_numfac 2 -num_rhs 2 732 test: 733 args: -mat_type seqaij 734 test: 735 nsize: 2 736 args: -mat_type mpiaij 737 test: 738 args: -mat_type seqbaij -matload_block_size 2 739 test: 740 nsize: 2 741 args: -mat_type mpibaij -matload_block_size 2 742 test: 743 args: -mat_type aij -mat_mumps_icntl_7 5 744 TODO: Need to determine if deprecated 745 746 test: 747 suffix: mumps_lu_parmetis 748 output_file: output/ex72_mumps.out 749 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps parmetis 750 nsize: 2 751 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 752 753 test: 754 suffix: mumps_lu_ptscotch 755 output_file: output/ex72_mumps.out 756 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps ptscotch 757 nsize: 2 758 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 759 760 testset: 761 # The output file here is the same as mumps 762 suffix: mumps_redundant 763 output_file: output/ex72_mumps_redundant.out 764 nsize: 8 765 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps 766 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 767 768 testset: 769 suffix: pastix_cholesky 770 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix 771 output_file: output/ex72_mumps.out 772 nsize: {{1 2}} 773 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 774 775 testset: 776 suffix: pastix_lu 777 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix 778 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type pastix -num_numfac 2 -num_rhs 2 779 output_file: output/ex72_mumps.out 780 test: 781 args: -mat_type seqaij 782 test: 783 nsize: 2 784 args: -mat_type mpiaij 785 786 testset: 787 suffix: pastix_redundant 788 output_file: output/ex72_mumps_redundant.out 789 nsize: 8 790 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) pastix 791 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 792 793 testset: 794 suffix: superlu_dist_lu 795 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu_dist 796 output_file: output/ex72_mumps.out 797 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type superlu_dist -num_numfac 2 -num_rhs 2 798 nsize: {{1 2}} 799 800 testset: 801 suffix: superlu_dist_redundant 802 nsize: 8 803 output_file: output/ex72_mumps_redundant.out 804 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu_dist 805 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 806 807 testset: 808 suffix: superlu_lu 809 output_file: output/ex72_mumps.out 810 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) superlu 811 args: -f0 ${DATAFILESPATH}/matrices/small -ksp_type preonly -pc_type lu -pc_factor_mat_solver_type superlu -num_numfac 2 -num_rhs 2 812 813 testset: 814 suffix: umfpack 815 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) suitesparse 816 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 817 818 testset: 819 suffix: zeropivot 820 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 821 args: -f0 ${DATAFILESPATH}/matrices/small -test_zeropivot -ksp_converged_reason -ksp_type fgmres -pc_type ksp -fp_trap 0 822 test: 823 nsize: 3 824 args: -ksp_pc_type bjacobi 825 test: 826 nsize: 2 827 args: -ksp_ksp_type cg -ksp_pc_type bjacobi -ksp_pc_bjacobi_blocks 1 828 #test: 829 #nsize: 3 830 #args: -ksp_ksp_converged_reason -ksp_pc_type bjacobi -ksp_sub_ksp_converged_reason 831 #TODO: Need to determine if deprecated 832 833 testset: 834 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 835 args: -mat_convert_type is -f0 ${DATAFILESPATH}/matrices/medium -ksp_type fgmres 836 test: 837 suffix: aij_gdsw 838 nsize: 4 839 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 840 test: 841 output_file: output/ex72_aij_gdsw.out 842 suffix: is_gdsw 843 nsize: 4 844 args: -pc_type mg -pc_mg_levels 2 -pc_mg_adapt_interp_coarse_space gdsw -pc_mg_galerkin -mg_levels_pc_type asm 845 test: 846 suffix: is_asm 847 nsize: {{1 2}separate output} 848 args: -pc_type asm 849 test: 850 suffix: bddc_seq 851 nsize: 1 852 args: -pc_type bddc 853 test: 854 suffix: bddc_par 855 nsize: 2 856 args: -pc_type bddc 857 test: 858 requires: parmetis 859 suffix: bddc_par_nd_parmetis 860 filter: sed -e "s/Number of iterations = [0-9]/Number of iterations = 9/g" 861 nsize: 4 862 args: -ksp_error_if_not_converged -pc_type bddc -mat_is_disassemble_l2g_type nd -mat_partitioning_type parmetis 863 test: 864 requires: ptscotch defined(PETSC_HAVE_SCOTCH_PARMETIS_V3_NODEND) 865 suffix: bddc_par_nd_ptscotch 866 filter: sed -e "s/Number of iterations = [0-9]/Number of iterations = 9/g" 867 nsize: 4 868 args: -ksp_error_if_not_converged -pc_type bddc -mat_is_disassemble_l2g_type nd -mat_partitioning_type ptscotch 869 870 testset: 871 requires: !__float128 hpddm slepc defined(PETSC_HAVE_DYNAMIC_LIBRARIES) defined(PETSC_USE_SHARED_LIBRARIES) 872 test: 873 suffix: hpddm_mat 874 output_file: output/ex72_bddc_seq.out 875 filter: sed -e "s/Number of iterations = 2/Number of iterations = 1/g" 876 nsize: 2 877 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 878 test: 879 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 880 suffix: hpddm_gen_non_hermitian 881 output_file: output/ex72_2.out 882 nsize: 4 883 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 884 test: 885 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) mumps !defined(PETSCTEST_VALGRIND) 886 suffix: hpddm_gen_non_hermitian_baij 887 output_file: output/ex72_10.out 888 nsize: 4 889 timeoutfactor: 2 890 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 891 892 # BDDC multiple subdomains per process tests 893 test: 894 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 895 suffix: matis_bddc_multisub_3d 896 nsize: {{1 2 3 4 5 6 7 8}} 897 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 898 899 test: 900 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 901 suffix: matis_bddc_multisub_2d 902 nsize: {{1 2 3 4 5 6 7 8}} 903 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 904 905 test: 906 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 907 suffix: matis_bddc_multisub_plex_2d 908 nsize: {{1 2 3 4 5 6 7 8}} 909 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 910 911 test: 912 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 913 suffix: matis_bddc_multisub_plex_3d 914 nsize: {{1 2 3 4 5 6 7 8}} 915 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 916 917 test: 918 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 919 suffix: matis_bddc_multisub_hcurl_2d 920 nsize: {{1 2 3 4 5 6 7 8}} 921 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 922 923 test: 924 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 925 suffix: matis_bddc_multisub_hdiv_3d 926 nsize: {{1 2 3 4 5 6 7 8}} 927 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 928 929 # These two tests slightly depend on the number of processes since the 930 # the Nedelec 3D support is not completely independent on the decomposition 931 test: 932 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 933 suffix: matis_bddc_multisub_hcurl_3d 934 nsize: {{1 3 4 8}separate output} 935 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 936 937 test: 938 requires: datafilespath double !defined(PETSC_USE_64BIT_INDICES) 939 suffix: matis_bddc_multisub_hcurl_3d_amr 940 nsize: {{1 3 4 8}separate output} 941 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 942 943 TEST*/ 944