Changes: 3.16#
General:
Change
MPIU_Allreduce()
to always returns a MPI error code that should be checked withCHKERRMPI(ierr)
Add support for A64FX and Cray compilers
Add support for ESSL 5.2 and later; drop support for ESSL <=5.1
Add support for NEC-SX Tsubasa Vector Engine
Add support for NVIDIA HPC SDK
Configure/Build:
Configure requires Python-2.7 or Python-3.4+.
Remove
--with-kokkos-cuda-arch
. One can use-with-cuda-gencodearch
to specify the cuda arch for Kokkos. Usually not needed since PETSc auto detects thatFor
--download-hdf5
, disable--download-hdf5-fortran-bindings
by defaultAdd OpenCascade package to PETSc and allow
--download-opencascade
Add support for hypre in device mode for both NVIDIA and AMD GPUs
Extend detection of C++ dialect to C++17. Configure now also takes minimum and maximum required C++ dialect of packages into account when choosing the C++ dialect
Sys:
Add
PetscDevice
class to manage discovered GPU devicesAdd
PetscDeviceKind
Add
PetscDeviceCreate()
,PetscDeviceConfigure()
, andPetscDeviceDestroy()
Add
PetscDeviceContext
class to manage asynchronous GPU compute support via a fork-join modelAdd
PetscDeviceContextCreate()
,PetscDeviceContextDestroy()
,PetscDeviceContextSetDevice()
,PetscDeviceContextGetDevice()
,PetscDeviceContextSetStreamType()
,PetscDeviceContextGetStreamType()
,PetscDeviceContextSetUp()
,PetscDeviceContextDuplicate()
,PetscDeviceContextQueryIdle()
,PetscDeviceContextWaitForContext()
,PetscDeviceContextFork()
,PetscDeviceContextJoin()
,PetscDeviceContextSynchronize()
,PetscDeviceContextGetCurrentContext()
,PetscDeviceContextSetCurrentContext()
, andPetscDeviceContextSetFromOptions()
Deprecate
petsccublas.h
andpetschipblas.h
in favor ofpetscdevice.h
andpetscdevicetypes.h
Add GPU event timers to capture kernel execution time accurately
Remove
WaitForCUDA()
andWaitForHIP()
beforePetscLogGpuTimeEnd()
Add MPIU_REAL_INT and MPIU_SCALAR_INT datatypes to be used for reduction operations
Add MPIU_MAXLOC and MPIU_MINLOC operations
Add
CHKERRCXX()
to catch C++ exceptions and return a PETSc error codeRemove
PetscStack
routines from public headers, this class should now be considered private
PetscViewer:
PetscViewerHDF5PushGroup()
: if input path begins with/
, it is taken as absolute, otherwise relative to the current groupPetscViewerHDF5HasAttribute()
,PetscViewerHDF5ReadAttribute()
,PetscViewerHDF5WriteAttribute()
,PetscViewerHDF5HasDataset()
andPetscViewerHDF5HasGroup()
support absolute paths (starting with/
) and paths relative to the current pushed groupAdd input argument to
PetscViewerHDF5ReadAttribute()
for default value that is used if attribute is not found in the HDF5 fileAdd
PetscViewerHDF5PushTimestepping()
,PetscViewerHDF5PopTimestepping()
andPetscViewerHDF5IsTimestepping()
to control timestepping mode.One can call
PetscViewerHDF5IncrementTimestep()
,PetscViewerHDF5SetTimestep()
orPetscViewerHDF5GetTimestep()
only if timestepping mode is activeError if timestepped dataset is read/written out of timestepping mode, or vice-versa
PetscDraw:
AO:
IS:
VecScatter / PetscSF:
PF:
Vec:
Add
VecMean()
to calculate arithmetic mean of elements of a vectorAdd
VecBoundToCPU()
to query information set withVecBindToCPU()
PetscSection:
Extend
PetscSectionView()
for section saving to HDF5Add
PetscSectionLoad()
for section loading from HDF5
PetscPartitioner:
Mat:
MATMPIKAIJ
now tracks the object state of the AIJ matrix describing the blockwise action of the KAIJ matrix and automatically rebuilds internal data structures before executing operations with the KAIJ matrix if the state has changedFactorization types now provide their preferred ordering (which may be
MATORDERINGEXTERNAL
) to prevent PETSc PCFactor from, by default, picking an ordering when it is not idealDeprecate
MatFactorGetUseOrdering()
; UseMatFactorGetCanUseOrdering()
insteadAdd
--download-htool
to use hierarchical matrices with the new typeMATHTOOL
Add
MATCENTERING
special matrix type that implements action of the centering matrixRemove -mat_mumps_icntl_7 1 option, use -pc_factor_mat_ordering_type <type> to have PETSc perform the ordering (sequential only)
Add
MATSOLVERSPQR
- interface to SuiteSparse QR factorizationAdd
MatSeqAIJKron()
- Kronecker product of twoMatSeqAIJ
Add
MatNormalGetMat()
to retrieve the underlyingMat
of aMATNORMAL
Add
MatNormalHermitianGetMat()
to retrieve the underlyingMat
of aMATNORMALHERMITIAN
Add
VecCreateMPICUDA()
andVecCreateMPIHIP()
to create MPI device vectorsAdd accessor routines for device index data of
MATSEQAIJCUSPARSE
matrices:MatSeqAIJCUSPARSEGetIJ()
andMatSeqAIJCUSPARSERestoreIJ()
Add accessor routines for device data of
MATSEQAIJCUSPARSE
matrices:MatSeqAIJCUSPARSEGetArray()
,MatSeqAIJCUSPARSERestoreArray()
,MatSeqAIJCUSPARSEGetArrayRead()
,MatSeqAIJCUSPARSERestoreArrayRead()
.MatSeqAIJCUSPARSEGetArrayWrite()
,MatSeqAIJCUSPARSERestoreArrayWrite()
Add support for
MATHYPRE
matrices on NVIDIA and AMD GPUsMatPreallocatorPreallocate
performance significantly improvedAdd
MatGetColumnReductions()
developer routine to calculate reductions over columns of a matrixAdd
MatGetColumnSums()
,MatGetColumnSumsRealPart()
,MatGetColumnSumsImaginaryPart()
to compute sums over matrix columnsAdd
MatGetColumnMeans()
,MatGetColumnMeansRealPart()
,MatGetColumnMeansImaginaryPart()
to compute arithmetic means over matrix columnsAdd
MatBoundToCPU()
to query information set withMatBindToCPU()
Rename
MATHARA
inMATH2OPUS
, supporting distributed memory operations with hierarchical matrices
PC:
Add
PCSetPreSolve()
Add
PCQR
- interface to SuiteSparse QR factorization forMatSeqAIJ
,MATNORMAL
, andMATNORMALHERMITIAN
Add support for BoomerAMG from
PCHYPRE
to run on NVIDIA and AMD GPUsPCShellGetContext()
now takesvoid*
as return argumentRename
PCHARA
inPCH2OPUS
, supporting distributed memory operations with hierarchical matrices
KSP:
KSPGetMonitorContext()
now takesvoid*
as return argumentKSPGetConvergenceContext()
now takesvoid*
as return argument
SNES:
Add
SNESSetComputeMFFunction()
Add support for
-snes_mf_operator
for use withSNESSetPicard()
SNESShellGetContext()
now takesvoid*
as return argument
SNESLineSearch:
TS:
Add
-ts_type irk
- fully implicit Runge-Kutta solversAdd
TSTrajectory
interface to the CAMS library for optimal offline checkpointing for multistage time stepping schemesAdd option
-ts_trajectory_memory_type <revolve | cams | petsc>
to switch checkpointing schedule softwareAdd option
-ts_trajectory_max_units_ram
to specify the maximum number of allowed checkpointing units
TAO:
TaoShellGetContext()
now takesvoid*
as return argument
DM/DA:
Change management of auxiliary data in DM from object composition to
DMGetAuxiliaryVec()
/DMSetAuxiliaryVec()
,DMCopyAuxiliaryVec()
Remove
DMGetNumBoundary()
andDMGetBoundary()
in favor of DS counterpartsRemove
DMCopyBoundary()
Change interface for
DMAddBoundary()
,PetscDSAddBoundary()
,PetscDSGetBoundary()
,PetscDSUpdateBoundary()
Add
DMDAVecGetArrayDOFWrite()
andDMDAVecRestoreArrayDOFWrite()
DMShellGetContext()
now takesvoid*
as return argument
DMSwarm:
Add
DMSwarmGetCellSwarm()
andDMSwarmRestoreCellSwarm()
DMPlex:
Add a
PETSCVIEWEREXODUSII
viewer type forDMView()
/DMLoad()
andVecView()
/VecLoad()
. Note that not all DMPlex can be saved in exodusII format since this file format requires that the numbering of cell sets be compactAdd
PetscViewerExodusIIOpen()
convenience functionAdd
PetscViewerExodusIISetOrder()
to generate “2nd order” elements (i.e. tri6, tet10, hex27) when usingDMView
with aPETSCVIEWEREXODUSII
viewerChange
DMPlexComputeBdResidualSingle()
andDMPlexComputeBdJacobianSingle()
to take a form keyAdd
DMPlexTopologyLoad()
,DMPlexCoordinatesLoad()
, andDMPlexLabelsLoad()
for incremental loading of aDMPlex
object from an HDF5 fileAdd
DMPlexTopologyView()
,DMPlexCoordinatesView()
, andDMPlexLabelsView()
for incremental saving of aDMPlex
object to an HDF5 fileAdd
DMPlexSectionView()
saving aPetscSection
in association with aDMPlex
meshAdd
DMPlexSectionLoad()
loading aPetscSection
in association with aDMPlex
meshAdd
DMPlexGlobalVectorView()
andDMPlexLocalVectorView()
saving global and local vectors in association with a data layout on aDMPlex
meshAdd
DMPlexGlobalVectorLoad()
andDMPlexLocalVectorLoad()
loading global and local vectors in association with a data layout on aDMPlex
meshAdd
DMPlexIsSimplex()
to check the shape of the first cellAdd
DMPlexShape
to describe prebuilt mesh domainsAdd
DMPlexCreateCoordinateSpace()
to make an FE space for the coordinatesAdd the automatic creation of a Plex from options, see
DMSetFromOptions()
The old options for
DMPlexCreateBoxMesh()
NO LONGER WORK. They have been changed to make the interface more uniformReplace
DMPlexCreateSquareBoundary()
andDMPlexCreateCubeBoundary()
withDMPlexCreateBoxSurfaceMesh()
Remove
DMPlexCreateReferenceCellByType()
The number of refinements is no longer an argument to
DMPlexCreateHexCylinderMesh()
Add
DMSetLabel()
Replace
DMPlexComputeJacobianAction()
withDMSNESComputeJacobianAction()
Add
DMSNESCreateJacobianMF()
Change
DMPlexComputeBdResidualSingle()
to takePetscFormKey
instead of explicit label/value/field argumentsAdd
DMPlexInflateToGeomModel()
which pushes refined points out to a geometric boundarySeparate EGADS and EGADSLite functionality, add
DMPlexCreateEGADSLiteFromFile()
Remove
DMPlexReverseCell()
andDMPlexOrientCell()
in favor ofDMPlexOrientPoint()
Remove
DMPlexCompareOrientations()
in favor ofDMPolytopeMatchOrientation()
Add
DMPlexGetCompressedClosure()
andDMPlexRestoreCompressedClosure()
Add
DMPlexMetricCreate
as a helper function for creating a (P1) Riemannian metric.Add
DMPlexMetricCreateUniform
as a helper function for creating a uniform metric.Add
DMPlexMetricCreateIsotropic
as a helper function for creating an isotropic metric.Add
DMPlexMetricEnforceSPD
for enforcing that a metric is symmetric positive-definite.Add
DMPlexMetricNormalize
to apply L-p metric normalization.Add
DMPlexMetricAverage
to average an arbitrary number of metrics.Add
DMPlexMetricAverage2
to average two metrics.Add
DMPlexMetricAverage3
to average three metrics.Add
DMPlexMetricIntersection
to intersect an arbitrary number of metrics.Add
DMPlexMetricIntersection2
to intersect two metrics.Add
DMPlexMetricIntersection3
to intersect three metrics.
FE/FV:
Change
PetscFEIntegrateBdResidual()
andPetscFEIntegrateBdJacobian()
to take bothPetscWeakForm
and form keyAdd
PetscFEGeomGetPoint()
andPetscFEGeomGetCellPoint
to package up geometry handling
DMNetwork:
Add
DMNetworkCreateIS()
andDMNetworkCreateLocalIS()
Remove nv from
DMNetworkAddSubnetwork()
DMStag:
DT:
Add
PetscWeakFormCopy()
,PetscWeakFormClear()
,PetscWeakFormRewriteKeys()
andPetscWeakFormClearIndex()
Add
PetscDSDestroyBoundary()
andPetscDSCopyExactSolutions()
PetscDSGetContext()
now takesvoid*
as return argumentAdd
PetscWeakFormReplaceLabel()
to change labels after mesh modification
Fortran:
Add support for
PetscInitialize(filename,help,ierr)
,PetscInitialize(ierr)
in addition to currentPetscInitialize(filename,ierr)