| 2dce792e | 14-Aug-2023 |
Toby Isaac <toby.isaac@gmail.com> |
PetscFE: add PETSCFEVECTOR
Reductions in the cost of computing, storing, and applying a Tabulation can be achieved for a finite element space that is a vector of "scalar" finite elements (the "scala
PetscFE: add PETSCFEVECTOR
Reductions in the cost of computing, storing, and applying a Tabulation can be achieved for a finite element space that is a vector of "scalar" finite elements (the "scalar" element itself could be vector-valued).
Reductions in the cost of storing and applying a Tabulation can't be realized until the PetscTabulation structure itself is changed, but at the very least reduction in the cost of computing a tabulation is possible with a new PetscFEType, PETSCFEVECTOR.
To complete the interface, we also add PETSCDUALSPACESUM, a dual space whose dual basis is the sum of other dual bases, that parallels PETSCSPACESUM (the space and dual space of a PETSCFEVECTOR are a PETSCSPACESUM and PETSCDUALSPACESUM, respectively).
To allow the user to specify whether the basis vector and value components of the PETSCFEVECTOR of blockwise or interleaved, we also have to make sure PETSCSPACESUM and PETSCDUALSPACESUM can have blockwise or interleaved behavior. We add both capabilities.
PETSCFEVECTOR is now used by detecting compatible vector-valued dual and primal spaces in PetscFECreateFromSpaces().
show more ...
|
| 29e0a805 | 29-Aug-2023 |
Pieter Ghysels <pghysels@lbl.gov> |
Update the interface to STRUMPACK
STRUMPACK provides a sparse direct solver (but unlike fi SuperLU, it is based on the multifrontal method). STRUMPACK also provides preconditioners based on approxim
Update the interface to STRUMPACK
STRUMPACK provides a sparse direct solver (but unlike fi SuperLU, it is based on the multifrontal method). STRUMPACK also provides preconditioners based on approximate multifrontal LU factorization. In the precoditioners larger dense blocks in the sparse LU factors are compressed using rank-structured matrix approximations (or using lossy/lossless compression using the ZFP library).
See https://github.com/pghysels/STRUMPACK https://portal.nersc.gov/project/sparse/strumpack/
This commit adds different preconditioning options. Previously only the HSS (hierarchically Semi-Separable) format was supported. Now we also have BLR (Block Low Rank), HODLR (Hierarchically Off-Diagonal) with the option to replace low-rank with butterfly, Lossy and Lossless compression (through ZFP). The new methods work considerably better than the older HSS code. When using
-pc_type lu -pc_factor_mat_solver_type strumpack
the solver behaves as a direct solver. When using
-pc_type ilu -pc_factor_mat_solver_type strumpack
it will work as a preconditioner, using BLR compression. This should be a robust preconditioner for a wide range of problems. One can tune the compression tolerance, and the minimum block (separator) size for compression using:
-mat_strumpack_compression_rel_tol 1e-3 -mat_strumpack_compression_min_sep_size 500
You can also select the compression type explicitly
-pc_type ilu -pc_factor_mat_solver_type strumpack -mat_strumpack_compression LOSSY
For now we recommend BLR, as it seems to work best, and does not require additional external dependencies (it is also what MUMPS implements).
Also updates the test src/ksp/ksp/tutorials/ex52.c.
Also adds support for the solve with multiple RHS.
Also adds an option for the GEOMETRIC fill-reducing ordering which performs nested dissection on a regular nx x ny x nz grid with nc degrees of freedom per grid-point and a stencil (potentially a wider stencil). It is assumed that the matrix is in the natural (lexicographical?) ordering. This can make reordering much faster for regular grid problems.
Also adds installation scripts STRUMPACK dependencies SLATE, ZFP and ButterflyPACK. SLATE is a scalapack replacement with GPU capabilities. ZFP is used for floating point compression. ButterflyPACK is used for the HODLR and HODBF compression schemes.
show more ...
|
| b665b14e | 18-Jul-2023 |
Toby Isaac <toby.isaac@gmail.com> |
Profiling: Switch logging over to the new PetscLogHandler infrastructure
- Move data structures only needed by the default logger now (Action, Object) to logdefault.c
- Create petsclogdeprecated.
Profiling: Switch logging over to the new PetscLogHandler infrastructure
- Move data structures only needed by the default logger now (Action, Object) to logdefault.c
- Create petsclogdeprecated.h and petsc/private/logimpldeprecated.h for publicly visible symbols that are now deprecated. Yes, lots of symbols in petsc/private/logimpl.h were not only visible but had docstrings.
- The macros PetscLogEventBegin(), PetscLogEventEnd(), PetscLogEventSync(), PetscLogObjectCreate(), and PetscLogObjectDestroy() now looks through the log handlers in PetscLogHandlers, sees if they have they appropriate callbacks (Exposed in PetscLogHandlerHot), and calls them. Up to 4 log handlers can run simultaneously.
- All queries about the registered things now go through petsc_log_state.
- Output functions dispatch to the appropriate PetscLogHandler
- There is no need for xmllogevent.c, xmlviewer.c, eventlog.c, classlog.c, and stagelog.c anymore. Some orphaned functions (PetscLogSetThreshold(), PetscLogEventSetDof(), PetscLogEventSetError(), PetscASend(), PetscARecv(), PetscAReduce())
- PetscFEOpenCLLogResidual() did some intrusive things related to the old logging infrastruture: the private header for the default log handler is now imported into feopencl.c so that it can do equivalent things with the new infrastructure.
- PetscLogPauseCurrentEvent_Internal() is replaced with PetscLogEventsPause()
Deprecated symbols include:
- All functions related to PetscStageLog and the resizable array structs that it contained.
- The legacy EventBegin()/EventEnd() callbacks.
- PetscLogAllBegin(), which actually reported less information than PetscLogDefaultBegin() because it was not kept up-to-date with regards to GPU profiling.
show more ...
|