Skip to content

Commit bc9cbf8

Browse files
committed
Merge branch 'PETSc-3.25-compatible' into 'development'
Support PETSc 3.25.x See merge request damask/DAMASK!1186
2 parents c858326 + 423a5ad commit bc9cbf8

21 files changed

+274
-239
lines changed

.gitlab-ci.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ variables:
1212
GIT_SUBMODULE_STRATEGY: normal
1313
# Shortcut names
1414
MARC_VERSION: '2025.1'
15-
PETSC_GCC_LATEST: '2025.11.13'
16-
PETSC_ONEAPI_LATEST: '2025.11.13'
15+
PETSC_GCC_LATEST: '2026.04.03'
16+
PETSC_ONEAPI_LATEST: '2026.04.03'
1717
PYTHON_LATEST: '2026.02.24'
1818

1919
####################################################################################################
@@ -58,6 +58,7 @@ workflow:
5858
parallel:
5959
matrix:
6060
- IMAGE:
61+
- gcc_petsc-debug:2025.11.13
6162
- gcc_petsc-debug:2025.05.27a
6263
- gcc_petsc-debug:2025.03.10a
6364

@@ -81,6 +82,7 @@ workflow:
8182
parallel:
8283
matrix:
8384
- IMAGE:
85+
- oneapi_petsc-debug:2025.11.13
8486
- oneapi_petsc-debug:2025.06.12a
8587
- oneapi_petsc-debug:2025.03.27a
8688

@@ -98,6 +100,9 @@ workflow:
98100
parallel:
99101
matrix:
100102
- IMAGE:
103+
- gcc_petsc-default:2025.11.13
104+
- gcc_petsc-i64:2025.11.13
105+
- oneapi_petsc-default:2025.11.13
101106
- gcc_petsc-default:2025.05.27a
102107
- gcc_petsc-i64:2025.05.27a
103108
- oneapi_petsc-default:2025.06.12a

CMakeLists.txt

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# SPDX-License-Identifier: AGPL-3.0-or-later
22
cmake_minimum_required(VERSION 3.18.0)
3+
34
set(CMAKE_CXX_STANDARD 23)
45
set(CMAKE_C_STANDARD 17)
6+
57
include(FindPkgConfig REQUIRED)
68
include(CheckCXXSymbolExists REQUIRED)
9+
include(CheckSourceCompiles REQUIRED)
710

811
if(DEFINED ENV{PETSC_DIR})
912
message("PETSC_DIR:\n$ENV{PETSC_DIR}\n")
@@ -15,7 +18,7 @@ endif()
1518
project(Prerequisites LANGUAGES)
1619
set(ENV{PKG_CONFIG_PATH} "$ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}")
1720
set(PETSC_VERSION_MINOR_MIN "19")
18-
set(PETSC_VERSION_MINOR_MAX "24")
21+
set(PETSC_VERSION_MINOR_MAX "25")
1922

2023
pkg_check_modules(PETSC_MIN REQUIRED PETSc>=3.${PETSC_VERSION_MINOR_MIN}.0 QUIET) #CMake does not support version range
2124
pkg_check_modules(PETSC REQUIRED PETSc<=3.${PETSC_VERSION_MINOR_MAX}.99)
@@ -171,8 +174,8 @@ file(STRINGS "$ENV{PETSC_DIR}/$ENV{PETSC_ARCH}/lib/petsc/conf/petscvariables" PE
171174
string(REPLACE "PETSC_FC_INCLUDES = " "" PETSC_INCLUDES "${PETSC_INCLUDES}")
172175
message("PETSC_INCLUDES:\n${PETSC_INCLUDES}\n")
173176

174-
set(CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${BUILDCMD_PRE} ${OPENMP_FLAGS} ${STANDARD_CHECK} ${OPTIMIZATION_FLAGS} ${COMPILE_FLAGS}")
175-
set(CMAKE_Fortran_LINK_EXECUTABLE "${BUILDCMD_PRE} ${CMAKE_Fortran_COMPILER} ${OPENMP_FLAGS} ${OPTIMIZATION_FLAGS} ${LINKER_FLAGS}")
177+
set(CMAKE_Fortran_FLAGS_${CMAKE_BUILD_TYPE} "${BUILDCMD_PRE} ${OPENMP_FLAGS} ${STANDARD_CHECK} ${OPTIMIZATION_FLAGS}")
178+
set(CMAKE_Fortran_LINK_EXECUTABLE "${BUILDCMD_PRE} ${CMAKE_Fortran_COMPILER} ${OPENMP_FLAGS} ${OPTIMIZATION_FLAGS}")
176179

177180
set(CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE} "${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}} ${PETSC_INCLUDES}") # zlib installed via PETSc
178181

@@ -206,6 +209,86 @@ message("C Compiler Flags:\n${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}\n")
206209
message("C++ Compiler Flags:\n${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}\n")
207210
message("Fortran Linker Command:\n${CMAKE_Fortran_LINK_EXECUTABLE}\n")
208211

212+
# check MPI features
213+
block()
214+
string(REPLACE " " ";" CMAKE_REQUIRED_INCLUDES "${PETSC_INCLUDES}")
215+
string(REPLACE "-I" "" CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
216+
message("${CMAKE_REQUIRED_INCLUDES}")
217+
218+
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
219+
220+
check_source_compiles(Fortran
221+
"#include <petsc/finclude/petscsys.h>
222+
module m
223+
use PETScSys
224+
implicit none
225+
contains
226+
subroutine s()
227+
integer :: i
228+
i = PETSC_COMM_WORLD%MPI_val
229+
end subroutine s
230+
end module m"
231+
PETSC_USES_MPIF08)
232+
233+
check_source_compiles(Fortran
234+
"#include <petsc/finclude/petscsys.h>
235+
module m
236+
use PETScSys
237+
implicit none
238+
contains
239+
subroutine s()
240+
integer :: i
241+
i = MPI_COMM_WORLD%MPI_val
242+
end subroutine s
243+
end module m"
244+
PETSC_EXPOSES_MPIF08)
245+
246+
check_source_compiles(Fortran
247+
"#include <petsc/finclude/petscsys.h>
248+
module m
249+
use PETScSys
250+
implicit none
251+
contains
252+
subroutine s()
253+
integer :: i
254+
i = MPI_COMM_WORLD
255+
end subroutine s
256+
end module m"
257+
PETSC_EXPOSES_MPIF90)
258+
259+
check_source_compiles(Fortran
260+
"module m
261+
use HDF5
262+
use MPI_f08
263+
implicit none
264+
contains
265+
subroutine s()
266+
integer :: hdferr
267+
integer(HID_T) :: plist_access_id
268+
call H5Pset_fapl_mpio_f(plist_access_id, MPI_COMM_WORLD, MPI_INFO_NULL, hdferr)
269+
end subroutine s
270+
end module m"
271+
HDF5_SUPPORTS_MPIF08)
272+
endblock()
273+
274+
if(PETSC_USES_MPIF08)
275+
add_compile_definitions($<$<COMPILE_LANGUAGE:Fortran>:PETSC_USES_MPIF08>)
276+
endif()
277+
278+
if(PETSC_EXPOSES_MPIF08)
279+
add_compile_definitions($<$<COMPILE_LANGUAGE:Fortran>:PETSC_EXPOSES_MPI>)
280+
add_compile_definitions($<$<COMPILE_LANGUAGE:Fortran>:PETSC_EXPOSES_MPIF08>)
281+
endif()
282+
283+
if(PETSC_EXPOSES_MPIF90)
284+
add_compile_definitions($<$<COMPILE_LANGUAGE:Fortran>:PETSC_EXPOSES_MPI>)
285+
add_compile_definitions($<$<COMPILE_LANGUAGE:Fortran>:PETSC_EXPOSES_MPIF90>)
286+
endif()
287+
288+
if(HDF5_SUPPORTS_MPIF08)
289+
add_compile_definitions($<$<COMPILE_LANGUAGE:Fortran>:HDF5_SUPPORTS_MPIF08>)
290+
endif()
291+
209292
# location of code
210293
add_subdirectory(src)
211294

src/HDF5_utilities.f90

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module HDF5_utilities
1414
use HDF5
1515
#ifdef PETSC
1616
use PETScSys
17-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
17+
#ifndef PETSC_EXPOSES_MPI
1818
use MPI_f08
1919
use MPI, only: MPI_INFO_NULL_F90 => MPI_INFO_NULL
2020
#endif
@@ -24,7 +24,7 @@ module HDF5_utilities
2424
use parallelization
2525
use misc
2626

27-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
27+
#ifndef PETSC_EXPOSES_MPIF90
2828
implicit none(type,external)
2929
#else
3030
implicit none
@@ -209,10 +209,12 @@ integer(HID_T) function HDF5_openFile(fileName,mode,parallel)
209209
call HDF5_chkerr(hdferr,__FILE__//':'//IO_intAsStr(__LINE__))
210210
#ifdef PETSC
211211
if (misc_optional(parallel,.true.)) &
212-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
213-
call H5Pset_fapl_mpio_f(plist_access_id, PETSC_COMM_WORLD, MPI_INFO_NULL_F90, hdferr)
212+
#if defined(PETSC_EXPOSES_MPIF90)
213+
call H5Pset_fapl_mpio_f(plist_access_id, PETSC_COMM_WORLD, MPI_INFO_NULL, hdferr)
214+
#elif !defined(HDF5_SUPPORTS_MPIF08)
215+
call H5Pset_fapl_mpio_f(plist_access_id, MPI_COMM_WORLD%MPI_val, MPI_INFO_NULL_F90, hdferr)
214216
#else
215-
call H5Pset_fapl_mpio_f(plist_access_id, PETSC_COMM_WORLD, MPI_INFO_NULL, hdferr)
217+
call H5Pset_fapl_mpio_f(plist_access_id, MPI_COMM_WORLD, MPI_INFO_NULL, hdferr)
216218
#endif
217219
call HDF5_chkerr(hdferr,__FILE__//':'//IO_intAsStr(__LINE__))
218220
#endif

src/IO.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ end subroutine IO_selfTest
761761
subroutine quit(stop_id)
762762
#include <petsc/finclude/petscsys.h>
763763
use PETScSys
764-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
764+
#ifndef PETSC_EXPOSES_MPI
765765
use MPI_f08
766766
#endif
767767
use HDF5

src/grid/DAMASK_grid.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <petsc/finclude/petscsys.h>
1111
program DAMASK_grid
1212
use PETScSys
13-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
13+
#ifndef PETSC_EXPOSES_MPI
1414
use MPI_f08
1515
#endif
1616

@@ -36,7 +36,7 @@ program DAMASK_grid
3636
use grid_thermal_spectral
3737
use result
3838

39-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
39+
#ifndef PETSC_EXPOSES_MPIF90
4040
implicit none(type,external)
4141
#else
4242
implicit none

src/grid/discretization_grid.f90

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,19 @@
66
!> @brief Parse geometry file to set up discretization and geometry for nonlocal model
77
!--------------------------------------------------------------------------------------------------
88
#include <petsc/finclude/petscsys.h>
9+
#if defined(PETSC_EXPOSES_MPIF90)
10+
#define MPI_COMM_WORLD_F90 MPI_COMM_WORLD
11+
#else
12+
#define MPI_COMM_WORLD_F90 MPI_COMM_WORLD%MPI_val
13+
#endif
914
module discretization_grid
1015
use PETScSys
11-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
16+
#ifndef PETSC_EXPOSES_MPI
1217
use MPI_f08
1318
#endif
14-
use FFTW3
19+
use HDF5
1520

21+
use FFTW3
1622
use prec
1723
use parallelization
1824
#if !defined(BOOST)
@@ -22,13 +28,13 @@ module discretization_grid
2228
use IO
2329
use C_interfacing
2430
use config
25-
use HDF5
2631
use HDF5_utilities
2732
use result
2833
use discretization
2934
use geometry_plastic_nonlocal
3035

31-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
36+
37+
#ifndef PETSC_EXPOSES_MPIF90
3238
implicit none(type,external)
3339
#else
3440
implicit none
@@ -95,7 +101,6 @@ end subroutine C_VTI__delete
95101

96102
contains
97103

98-
99104
!--------------------------------------------------------------------------------------------------
100105
!> @brief Read the geometry file to obtain information on discretization.
101106
!--------------------------------------------------------------------------------------------------
@@ -189,7 +194,7 @@ subroutine discretization_grid_init()
189194

190195
call fftw_mpi_init()
191196
devNull = fftw_mpi_local_size_3d(int(cells(3),C_INTPTR_T),int(cells(2),C_INTPTR_T),int(cells(1)/2+1,C_INTPTR_T), &
192-
PETSC_COMM_WORLD, &
197+
MPI_COMM_WORLD_F90, &
193198
cells3_, & ! domain cells size along z
194199
cells3Offset_) ! domain cells offset along z
195200
if (cells3_==0_C_INTPTR_T) call IO_error(894_pI16,'Cannot distribute MPI processes')

src/grid/grid_chemical_FDM.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
! SPDX-License-Identifier: AGPL-3.0-or-later
2-
module grid_chemical_FDM
32
#include <petsc/finclude/petscsnes.h>
43
#include <petsc/finclude/petscdmda.h>
4+
module grid_chemical_FDM
55
use PETScDMDA
66
use PETScSNES
7-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
7+
#ifndef PETSC_EXPOSES_MPI
88
use MPI_f08
99
#endif
1010

@@ -19,7 +19,7 @@ module grid_chemical_FDM
1919
use config
2020
use math
2121

22-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
22+
#ifndef PETSC_EXPOSES_MPIF90
2323
implicit none(type,external)
2424
#else
2525
implicit none

src/grid/grid_damage_spectral.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,24 @@
1010
module grid_damage_spectral
1111
use PETScDMDA
1212
use PETScSNES
13-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
13+
#ifndef PETSC_EXPOSES_MPI
1414
use MPI_f08
1515
#endif
16+
use HDF5
1617

1718
use prec
1819
use parallelization
1920
use IO
2021
use misc
2122
use CLI
2223
use HDF5_utilities
23-
use HDF5
2424
use spectral_utilities
2525
use discretization_grid
2626
use homogenization
2727
use types
2828
use config
2929

30-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
30+
#ifndef PETSC_EXPOSES_MPIF90
3131
implicit none(type,external)
3232
#else
3333
implicit none

src/grid/grid_mech_FEM.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ module grid_mechanical_FEM
1111
use PETScDMDA
1212
use PETScSNES
1313
use PETScMat
14-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
14+
#ifndef PETSC_EXPOSES_MPI
1515
use MPI_f08
1616
#endif
17+
use HDF5
1718

1819
use prec
1920
use parallelization
2021
use IO
2122
use misc
2223
use CLI
23-
use HDF5
2424
use HDF5_utilities
2525
use math
2626
use rotations
@@ -32,7 +32,7 @@ module grid_mechanical_FEM
3232
use discretization_grid
3333
use constants
3434

35-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
35+
#ifndef PETSC_EXPOSES_MPIF90
3636
implicit none(type,external)
3737
#else
3838
implicit none

src/grid/grid_mech_spectral_Galerkin.f90

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@
1111
module grid_mechanical_spectral_Galerkin
1212
use PETScDMDA
1313
use PETScSNES
14-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
14+
#ifndef PETSC_EXPOSES_MPI
1515
use MPI_f08
1616
#endif
17+
use HDF5
1718

1819
use prec
1920
use parallelization
2021
use CLI
2122
use misc
2223
use IO
23-
use HDF5
2424
use HDF5_utilities
2525
use math
2626
use rotations
@@ -30,7 +30,7 @@ module grid_mechanical_spectral_Galerkin
3030
use discretization_grid
3131
use constants
3232

33-
#ifndef PETSC_HAVE_MPI_F90MODULE_VISIBILITY
33+
#ifndef PETSC_EXPOSES_MPIF90
3434
implicit none(type,external)
3535
#else
3636
implicit none
@@ -98,6 +98,7 @@ module grid_mechanical_spectral_Galerkin
9898

9999
! Missing interfaces for some PETSc versions
100100
interface
101+
#if PETSC_VERSION_MINOR<25
101102
subroutine MatCreateShell(comm,mloc,nloc,m,n,ctx,mat,ierr)
102103
use petscmat
103104
MPI_Comm :: comm
@@ -118,7 +119,7 @@ subroutine MatShellSetOperation(mat,op_num,op_callback,ierr)
118119
external :: op_callback
119120
PetscErrorCode :: ierr
120121
end subroutine MatShellSetOperation
121-
122+
#endif
122123
#if PETSC_VERSION_MINOR<24
123124
subroutine SNESSetUpdate(snes_mech,upd_callback,ierr)
124125
use petscsnes

0 commit comments

Comments
 (0)