Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions cmake/SCHISM.homebrew.gfortran-clang
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# CMake presets for compiling on a Homebrew (Linux/macOS) system
#
# SPDX-FileCopyrightText: 2024-2025 Helmholtz-Zentrum hereon GmbH
# SPDX-License-Identifier: CC0-1.0
# SPDX-FileContributor: Carsten Lemmen <[email protected]>
#
# Prerequisites:
# brew install llvm gfortran cmake make
#

# Detect Homebrew prefix for macOS and Linux
if(EXISTS /opt/homebrew)
set(HOMEBREW_PREFIX /opt/homebrew)
elseif(EXISTS $ENV{HOME}/.linuxbrew)
set(HOMEBREW_PREFIX $ENV{HOME}/.linuxbrew)
elseif(EXISTS /home/linuxbrew/.linuxbrew)
set(HOMEBREW_PREFIX /home/linuxbrew/.linuxbrew)
elseif(EXISTS /usr/local)
set(HOMEBREW_PREFIX /usr/local)
else()
message(FATAL_ERROR "Homebrew prefix not found.")
endif()

# Set parallel compilers from Homebrew MPI wrappers
set(CMAKE_Fortran_COMPILER ${HOMEBREW_PREFIX}/bin/mpifort CACHE PATH "Path to parallel Fortran compiler")
set(CMAKE_C_COMPILER ${HOMEBREW_PREFIX}/bin/mpicc CACHE PATH "Path to parallel C compiler")
set(CMAKE_CXX_COMPILER ${HOMEBREW_PREFIX}/bin/mpicxx CACHE PATH "Path to parallel C++ compiler")

# Fortran compiler flags
set(CMAKE_Fortran_FLAGS "-ffree-line-length-none -fallow-argument-mismatch" CACHE STRING "Fortran flags" FORCE)
set(CMAKE_Fortran_FLAGS_RELEASE "-O2 -ffree-line-length-none -static-libgfortran -finit-local-zero" CACHE STRING "Fortran release flags" FORCE)

# NetCDF library paths (Homebrew default prefix)
set(NetCDF_FORTRAN_DIR ${HOMEBREW_PREFIX} CACHE PATH "Path to NetCDF Fortran library")
set(NetCDF_C_DIR ${HOMEBREW_PREFIX} CACHE PATH "Path to NetCDF C library")
22 changes: 10 additions & 12 deletions cmake/SCHISM.local.conda
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,19 @@
# SPDX-License-Identifier: CC0-1.0
# SPDX-FileContributor Carsten Lemmen <[email protected]

message(WARNING "If you get an error 'Error copying Fortran module' with uppercase/lowercase mismatch, then try setting the CMAKE_C_PREPROCESS_FLAG to an empty string in cmake/SCHISMCompile.cmake")
if(NOT DEFINED ENV{CONDA_PREFIX})
message(FATAL_ERROR "CONDA_PREFIX is not set. Please activate your conda environment before configuring.")
endif()

set(CMAKE_Fortran_COMPILER $ENV{CONDA_PREFIX}/bin/mpifort CACHE PATH "Path to parallel Fortran compiler")
set(CMAKE_C_COMPILER $ENV{CONDA_PREFIX}/bin/mpicc CACHE PATH "Path to parallel C compiler")
set(CMAKE_CXX_COMPILER $ENV{CONDA_PREFIX}/bin/mpicxx CACHE PATH "Path to parallel C++ compiler")
set(PARMETIS_ROOT $ENV{CONDA_PREFIX} CACHE PATH "Root path for external (par)metis")

set_source_files_properties(
*.F90
PROPERTIES Fortran_PREPROCESS ON
)

# Fix gfortran/clang for conda environments
if("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU")
if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set( C_PREPROCESS_FLAG "" CACHE STRING "C Preprocessor Flag")
endif()
# Prefer conda parmetis by defining PARMETIS_ROOT if it is installed in conda.
# Validation is leveraged to the FindParMETIS cmake module
if(EXISTS "$ENV{CONDA_PREFIX}/include/parmetis.h")
message(STATUS "Found ParMETIS header in conda environment; setting PARMETIS_ROOT to $ENV{CONDA_PREFIX}")
set(PARMETIS_ROOT "$ENV{CONDA_PREFIX}" CACHE PATH "Root path for external (par)metis")
else()
message(STATUS "ParMETIS header not found in conda environment; PARMETIS_ROOT not set")
endif()
19 changes: 11 additions & 8 deletions cmake/SCHISMCompile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,20 @@ if("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "PGI")
set( C_PREPROCESS_FLAG "-Mpreprocess" CACHE STRING "C Preprocessor Flag")
endif()

# Both Clang and GNU compilers need an empty C_PREPROCESS_FLAG
if("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "GNU")
set (SCHISM_GFORTRAN_OPTIONS " -ffree-line-length-none")
set( CMAKE_Fortran_FLAGS_RELEASE_INIT "-O2 ${SCHISM_GFORTRAN_OPTIONS}")
set( CMAKE_Fortran_FLAGS_DEBUG_INIT "-g ${SCHISM_GFORTRAN_OPTIONS}")
set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-O2 -g ${SCHISM_GFORTRAN_OPTIONS}")
unset( C_PREPROCESS_FLAG CACHE)
if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
set( C_PREPROCESS_FLAG "--preprocess" CACHE STRING "C Preprocessor Flag")
elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "AppleClang")
set( C_PREPROCESS_FLAG "--preprocess" CACHE STRING "C Preprocessor Flag")
else()
set( C_PREPROCESS_FLAG "-cpp" CACHE STRING "C Preprocessor Flag")
endif()
set( C_PREPROCESS_FLAG "" CACHE STRING "C Preprocessor Flag")
endif()

if("${CMAKE_Fortran_COMPILER_ID}" STREQUAL "FLANG")
set (SCHISM_FLANG_OPTIONS " -Mfreeform -Mstandard")
set( CMAKE_Fortran_FLAGS_RELEASE_INIT "-O2 ${SCHISM_FLANG_OPTIONS}")
set( CMAKE_Fortran_FLAGS_DEBUG_INIT "-g ${SCHISM_FLANG_OPTIONS}")
set( CMAKE_Fortran_FLAGS_RELWITHDEBINFO_INIT "-O2 -g ${SCHISM_FLANG_OPTIONS}")
set( C_PREPROCESS_FLAG "" CACHE STRING "C Preprocessor Flag")
endif()

4 changes: 2 additions & 2 deletions src/Fabm/fabm_schism.F90
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
!> @author Jan Kossack <[email protected]>
!> @author Wang Zhenggui

!> @copyright Copyright 2021-2024 Helmholtz-Zentrum hereon GmbH
!> @copyright Copyright 2021-2025 Helmholtz-Zentrum hereon GmbH
!> @copyright Copyright 2021-2022 Virginia Institute of Marine Science
!> @copyright Copyright 2017-2021 Helmholtz-Zentrum Geesthacht GmbH
!
Expand Down Expand Up @@ -400,7 +400,7 @@ subroutine fabm_schism_init_stage2
call fs%model%set_mask(fs%mask_hz)
#endif
#endif
#endif
!#endif

allocate(bottom_idx(1:ne))
do i=1,ne
Expand Down