# Changes: 3.12#

General:

PetscRoundReal() has been removed, since the math routine round() is not supported on all systems: perhaps use PetscCeilReal() or PetscFloorReal()<li>

The legacy and CMake compile systems (make all-legacy and all-cmake) are removed

make gnumake is now make libs

PetscArraycmp() should be used instead of PetscMemcmp(), it takes a count argument instead of a byte argument

PetscArraycpy() should be used instead of PetscMemcpy(), it takes a count argument instead of a byte argument

PetscArrayzero() should be used instead of PetscMemzero(), it takes a count argument instead of a byte argument

PetscArraymove() should be used instead of PetscMemmove(), it takes a count argument instead of a byte argument

The ./configure options -with-gnu-compilers and -with-vendor-compilers are removed

The ./configure option –with-avx512-kernels defaults to true now so the manually optimized AVX-512 kernels are used by default

The order ./configure tests compilers has changed so there may be a different compiler selected if you do not provide them

Added –with-64-bit-blas-indices that will switch to 64 bit indices when using MKL libraries for BLAS/LAPACK and build OpenBLAS with this support

Changed PETSC_DEPRECATED() to PETSC_DEPRECATED_FUNCTION() and PETSC_DEPRECATED_TYPEDEF() to match naming of PETSC_DEPRECATED_ENUM() and PETSC_DEPRECATED_MACRO

-help now causes the printing of the current value and the newly set value for PetscOptionsInt(), etc

PetscFunctionListPrintTypes() takes an additional final argument after the current value, the set value

PetscCalloc*() now calls the system calloc() routine instead of malloc() plus memzero()

-malloc is now marked as deprecated, use -malloc_debug instead

-malloc_log and -malloc_log_threshold are now -malloc_view and -malloc_view_threshold

PetscMallocDebug() is now PetscMallocSetDebug()

PetscMallocDumpLog() is now PetscMallocView(), see also PetscMallocViewSet()

PetscMallocSetDumpLogThreshold() and PetscMallocSetDumpLog() are now PetscMallocViewSet()

With -malloc_test or -malloc_debug allocated memory is initialized with NaN to detect use of uninitialized numerical arrays

PetscMallocSet() now takes three arguments instead of two

Moved PetscCUBLASGetHandle() to a separate header file petscublas.h

Moved VecCUDA*-routines from petsccuda.h into petscvec.h. Removed petsccuda.h

Configure/Build:

C++ dialect is now auto-detected (C++14 first and then C++11). One can disable this check using –with-cxx-dialect=0, or force it to only check for C++11 using –with-cxx-dialect=C++11

New option –download-hpddm to enable PCHPDDM and KSPHPDDM

IS:

PetscDraw:

PF:

Vec:

VecCUDAGet/RestoreArrayReadWrite() changed to VecCUDAGet/RestoreArray()

VecViennaCLGet/RestoreArrayReadWrite() changed to VecViennaCLGet/RestoreArray()

Added VecGet/RestoreArray/ReadInPlace() to get array of a vector where it is without copying from GPU to CPU.

PetscLayout:

Added PetscLayoutCreateFromSizes()

Added PetscLayoutCreateFromRanges()

Calling PetscLayoutSetUp() twice with different sizes is now forbidden

PetscSection:

VecScatter & PetscSF:

The default VecScatter implementation is changed to PetscSF. In other words, the default VecScatter shares PetscSF’s MPI communication code. One can use -vecscatter_type mpi1 to go back to the old implementation.

Added new InsertMode MAX_VALUES and MIN_VALUES support in VecScatterBegin/End and VecGhostUpdateBegin/End.

PetscSFComputeMultiRootOriginalNumbering: add output argument with the number of multiroots for convenience

Added an enum type PetscSFPattern for SF graph patterns. Valid values include PETSCSF_PATTERN_ALLGATHER, PETSCSF_PATTERN_GATHER and PETSCSF_PATTERN_ALLTOALL.

Added PetscSFSetGraphWithPattern() to set SF graphs with predefined patterns.

Added PetscSFComposeInverse() to compose a new SF by putting the inverse of an SF under the another SF.

Added MPI-3.0 neighborhood collectives support. One can use command line option -sf_type neighbor to let SF use MPI-3.0 neighborhood collectives for communication instead of the default MPI_Send/Recv.

PetscSF is now CUDA-aware. The rootdata, leafdata arguments passed to SF routines can be either GPU pointers or CPU pointers. Use a CUDA-aware MPI and option -use_gpu_aware_mpi to enable it.

VecScatter is also CUDA-aware. You can do VecScatter on CUDA vectors without copying them from GPU to CPU. Again, you need a CUDA-aware MPI and option -use_gpu_aware_mpi.

Removed PetscSFCreateFromZero. Instead, users should use PetscSFCreate() to create an SF, and then set its graph with PetscSFSetGraphWithPattern(..,PETSCSF_PATTERN_GATHER).

Renamed PetscSFGetRanks() to PetscSFGetRootRanks().

Mat:

MatShift(Mat,0); will no longer silently insure there are no missing diagonal entries. (Previously it would put 0 into any diagonal entry that was missing)

Renamed MatComputeExplicitOperator() into MatComputeOperator() and MatComputeExplicitOperatorTranspose() into MatComputeOperatorTranspose(). Added extra argument to select the desired matrix type

MatLoad() now supports loading dense matrices from HDF5/MAT files.

Added new Mat type, MATKAIJ, for matrices that can be expressed in a particular Kronecker (tensor) product form.

Added MatCompositeSetScalings() to set separate scaling factors for component matrices.

Added a Boolean option -mat_composite_merge_mvctx to merge Mvctx of component matrices to optimize communication in MatMult() for ADDITIVE matrices. Default is true.

Added MATSEQDENSECUDA class to use GPUs for dense linear algebra.

PC:

Renamed PCComputeExplicitOperator() into PCComputeOperator(). Added extra argument to select the desired matrix type

Added support for PCCHOLESKY with MATSOLVERMUMPS and SBAIJ matrices with bs greater than 1

Added support for PCLU with MATSOLVERMKL_PARDISO (resp. MATSOLVERMKL_CPARDISO) and SEQBAIJ (resp. MPIBAIJ) matrices

Added support for PCCHOLESKY with MATSOLVERMKL_PARDISO (resp. MATSOLVERMKL_CPARDISO) and SEQSBAIJ (resp. MPISBAIJ) matrices

Added new preconditioner PCHPDDM, cf. src/ksp/ksp/examples/tutorials/ex71.c or src/snes/examples/tutorials/ex56.c

KSP:

Renamed KSPComputeExplicitOperator() into KSPComputeOperator(). Added extra argument to select the desired matrix type

KSPCGGLTRGetMinEig(KSP,PetscReal*) -> KSPGLTRGetMinEig(KSP,PetscReal*)

KSPCGGLTRGetLambda(KSP,PetscReal*) -> KSPGLTRGetLambda(KSP,PetscReal*)

KSPCGNASH, KSPCGSTCG, KSPCGGLTR -> KSPNASH, KSPSTCG, KSPGLTR

Added new Krylov solver KSPHPDDM, cf. src/ksp/ksp/examples/tutorials/ex75.c or src/ksp/ksp/examples/tutorials/ex9.c

SNES:

Changed SNES_CONVERGED_TR_DELTA to SNES_DIVERGED_TR_DELTA with a negative value to indicate diverged, unclear why it was ever positive since tiny trust region would indicate trouble, not converged

SNES:

-snes_mf no longer turns the preconditioner to none; to use it generally you will also need -pc_type none

SNESLineSearch:

TS:

Added tangent linear models for Runge-Kutta methods

Added second-order adjoint solvers based on Runge-Kutta methods and Theta methods

Improved the usage of first-order adjoint solvers in an optimization context. (The TS object can be reused in the optimization loop)

Changed the APIs for integrand evaluations and corresponding derivative evaluations. TSSetCostIntegrand() is deprecated. (Instead a quadrature TS is used to handle the callbacks)

TSTrajectory creates a unique name for folders that store the checkpoint data. Users can rerun adjoint codes without worrying about the folder names, and run multiple codes under the same directory.

Added support for using finite-differencing (and coloring) to approximate the Jacobians needed by the adjoint solvers. -snes_fd_color can be used for both implicit and explicit methods.

DM/DA:

Add DMGetLocalSection() to be used in preference to DMGetSection().

Add DMSetLocalSection() to be used in preference to DMSetSection().

DMGetDefaultSF() replaced with DMGetSectionSF().

DMSetDefaultSF() replaced with DMSetSectionSF().

DMCreateDefaultSF() replaced with DMCreateSectionSF().

DMAddLabel() now increments the reference count of the DMLabel.

DMRemoveLabel() now destroys the DMLabel if the output argument is NULL.

Add DMRemoveLabelBySelf() which looks up the DMLabel by itself, removes from DM and destroys.

DMPlex:

Rename DMPlexCreateSpectralClosurePermutation() to DMPlexSetClosurePermutationTensor()

Add DMPlexFindVertices() for vertex coordinates -> DAG point lookup

Add DMPlexGetOverlap() to get the partition overlap

DMNetwork:

Changed prototypes for DMNetworkSetSizes()

PetscViewer:

Removed PetscViewerHDF5{Get,Set}AIJNames() which are likely not really needed

PetscViewerHDF5SetCollective() and -viewer_hdf5_collective can be used to switch between independent and collective transfer mode. Defaults now to false (independent).

SYS:

Added PetscCheckDupsInt() to check if a PetscInt array has dups.

Added an argument to PetscBinaryRead() and PetscBinarySynchronizedRead() to return the number of items read.

AO:

Sieve:

Fortran: