From 8ae4561073f4178f01351cc8c4c0eb4c65552bac Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Mon, 26 Feb 2024 14:08:44 +0000 Subject: [PATCH 01/13] IFS-3146: update NUMALT in YOWALTAS --- src/ecwam/yowaltas.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ecwam/yowaltas.F90 b/src/ecwam/yowaltas.F90 index 556dc7787..1d4263ee2 100644 --- a/src/ecwam/yowaltas.F90 +++ b/src/ecwam/yowaltas.F90 @@ -13,7 +13,7 @@ MODULE YOWALTAS IMPLICIT NONE - INTEGER(KIND=JWIM), PARAMETER :: NUMALT=10 + INTEGER(KIND=JWIM), PARAMETER :: NUMALT=11 INTEGER(KIND=JWIM), PARAMETER :: NIJALT=4 INTEGER(KIND=JWIM), PARAMETER :: NALTDT=3 INTEGER(KIND=JWIM), PARAMETER :: NALTEDT=3 From 22537e4d5556b0786e85082c24587ed85e1247b7 Mon Sep 17 00:00:00 2001 From: Jean Bidlot Date: Fri, 17 Nov 2023 17:30:15 +0000 Subject: [PATCH 02/13] debug --- src/ecwam/userin.F90 | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ecwam/userin.F90 b/src/ecwam/userin.F90 index 3a87679bb..a7cc81956 100644 --- a/src/ecwam/userin.F90 +++ b/src/ecwam/userin.F90 @@ -1016,7 +1016,6 @@ SUBROUTINE USERIN (IFORCA, LWCUR) & TRIM(CSATNAME(ISAT)),' (',IBUFRSAT(ISAT),')' IF (LALTPAS(ISAT)) THEN WRITE(IU06,*) ' THE DATA WILL ONLY BE USED PASSIVELY !!! ' - WRITE(IU06,*) ' ' ENDIF IF (LALTLRGR(ISAT)) THEN WRITE(IU06,*) ' THE DATA WILL BE CORRECTED ' @@ -1038,8 +1037,7 @@ SUBROUTINE USERIN (IFORCA, LWCUR) & ' THE OBSERVATION ERROR.' ENDIF IF (LALTGRDOUT(ISAT)) THEN - WRITE(IU06,*) ' GRIDDED ALTIMETER FIELDS WILL BE' - WRITE(IU06,*) ' PRODUCED FOR THIS ALTIMETER.' + WRITE(IU06,*) ' GRIDDED ALTIMETER FIELDS WILL BE PRODUCED FOR THIS ALTIMETER.' LLNALTGO = .FALSE. ENDIF WRITE(IU06,*) ' ' From 99f80b6d5cbb48f32ffc9a4291c875f567a231f8 Mon Sep 17 00:00:00 2001 From: Andrew Dawson Date: Wed, 29 Nov 2023 15:37:41 +0000 Subject: [PATCH 03/13] Update wave model process identifiers for 49r1 As described here: https://confluence.ecmwf.int/display/IFS/generatingProcessIdentifier --- src/ecwam/yowgribhd.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ecwam/yowgribhd.F90 b/src/ecwam/yowgribhd.F90 index b3694c7c2..ee213829a 100644 --- a/src/ecwam/yowgribhd.F90 +++ b/src/ecwam/yowgribhd.F90 @@ -15,8 +15,8 @@ MODULE YOWGRIBHD !* ** *GRIB HEADERS: COMMON (DEFAULT) GRIB HEADERS. - INTEGER(KIND=JWIM), PARAMETER :: IMDLGRBID_G=119 !! see below the rule on how to select IMDLGRBID_G - INTEGER(KIND=JWIM), PARAMETER :: IMDLGRBID_M=219 + INTEGER(KIND=JWIM), PARAMETER :: IMDLGRBID_G=106 !! see below the rule on how to select IMDLGRBID_G + INTEGER(KIND=JWIM), PARAMETER :: IMDLGRBID_M=206 INTEGER(KIND=JWIM) :: NDATE_TIME_WINDOW_END INTEGER(KIND=JWIM) :: NWINOFF INTEGER(KIND=JWIM) :: NGRIB_VERSION ! grib version for output From 1bd121a70b6d9ce6450c48d0c60892737e51d236 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Thu, 29 Feb 2024 13:53:56 +0000 Subject: [PATCH 04/13] ecWAM: more minor fixes for NEMO SP builds --- src/ecwam/getcurr.F90 | 6 ++++-- src/ecwam/recvnemofields.F90 | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ecwam/getcurr.F90 b/src/ecwam/getcurr.F90 index 9bedcd3b7..2e1b5d38f 100644 --- a/src/ecwam/getcurr.F90 +++ b/src/ecwam/getcurr.F90 @@ -158,8 +158,10 @@ SUBROUTINE GETCURR(LWCUR, IREAD, BLK2LOC, & JY = BLK2LOC%JFROMIJ(IJ,ICHNK) IF (FIELDG%LKFR(IX,JY) <= 0.0_JWRB ) THEN ! if lake cover = 0, we assume open ocean point, then get currents directly from NEMO - WVENVI%UCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOUCUR(IJ,ICHNK)),CURRENT_MAX),NEMO2WAM%NEMOUCUR(IJ,ICHNK)) - WVENVI%VCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOVCUR(IJ,ICHNK)),CURRENT_MAX),NEMO2WAM%NEMOVCUR(IJ,ICHNK)) + WVENVI%UCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOUCUR(IJ,ICHNK)),REAL(CURRENT_MAX,JWRO)), & + & NEMO2WAM%NEMOUCUR(IJ,ICHNK)) + WVENVI%VCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOVCUR(IJ,ICHNK)),REAL(CURRENT_MAX,JWRO)), & + & NEMO2WAM%NEMOVCUR(IJ,ICHNK)) ELSE ! no currents over lakes and land WVENVI%UCUR(IJ,ICHNK) = 0.0_JWRB diff --git a/src/ecwam/recvnemofields.F90 b/src/ecwam/recvnemofields.F90 index 7eaa4b0a2..9931650dc 100644 --- a/src/ecwam/recvnemofields.F90 +++ b/src/ecwam/recvnemofields.F90 @@ -198,8 +198,10 @@ SUBROUTINE RECVNEMOFIELDS(BLK2LOC, WVENVI, NEMO2WAM, & JY = BLK2LOC%JFROMIJ(IJ,ICHNK) ! if lake cover = 0, we assume open ocean point, then get currents directly from NEMO IF (FIELDG%LKFR(IX,JY) <= 0.0_JWRB ) THEN - WVENVI%UCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOUCUR(IJ,ICHNK)),CURRENT_MAX),NEMO2WAM%NEMOUCUR(IJ,ICHNK)) - WVENVI%VCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOVCUR(IJ,ICHNK)),CURRENT_MAX),NEMO2WAM%NEMOVCUR(IJ,ICHNK)) + WVENVI%UCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOUCUR(IJ,ICHNK)),REAL(CURRENT_MAX,JWRO)), & + & NEMO2WAM%NEMOUCUR(IJ,ICHNK)) + WVENVI%VCUR(IJ,ICHNK) = SIGN(MIN(ABS(NEMO2WAM%NEMOVCUR(IJ,ICHNK)),REAL(CURRENT_MAX,JWRO)), & + & NEMO2WAM%NEMOVCUR(IJ,ICHNK)) ELSE WVENVI%UCUR(IJ,ICHNK)=0.0_JWRB WVENVI%VCUR(IJ,ICHNK)=0.0_JWRB From 3aa9a506f01b5230556ce48548572dd3593db458 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Mon, 4 Mar 2024 14:49:53 +0000 Subject: [PATCH 05/13] CMAKE: Remove redundant PARENT_PROJECT_NAME var --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index adc0b29b9..2a1e8c4af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,6 @@ cmake_minimum_required( VERSION 3.24 FATAL_ERROR ) find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild ) -set(PARENT_PROJECT_NAME "${PROJECT_NAME}") if( NOT ECWAM_PROJECT_NAME ) set( ECWAM_PROJECT_NAME ecwam ) endif() From c09a23acfdc33eb62195e0c1df33258b80133e46 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Wed, 6 Mar 2024 21:01:15 +0000 Subject: [PATCH 06/13] CMAKE: optionally set project name with prec suffix --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a1e8c4af..7a6704cb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,12 @@ cmake_minimum_required( VERSION 3.24 FATAL_ERROR ) find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../ecbuild ) +# If the directory name matches ecwam_dp or ecwam_sp, that will be chosen as PROJECT_NAME instead +get_filename_component( ecwam-source_dir ${CMAKE_CURRENT_SOURCE_DIR} NAME ) +if( ecwam-source_dir MATCHES "ecwam_(dp|sp)" ) + set( ECWAM_PROJECT_NAME ${ecwam-source_dir} ) +endif() + if( NOT ECWAM_PROJECT_NAME ) set( ECWAM_PROJECT_NAME ecwam ) endif() From decbfe580a75fa03ed50bf0ab71a7fff34ce7a11 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Wed, 6 Mar 2024 21:03:44 +0000 Subject: [PATCH 07/13] OCEAN_COUPLING: oceanmodel libraries are now set within ecwam --- CMakeLists.txt | 12 +++++++++++- src/ecwam/CMakeLists.txt | 6 ++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a6704cb2..652388579 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,16 @@ project( ${ECWAM_PROJECT_NAME} LANGUAGES Fortran C CXX ) include( ecwam_macros ) ecbuild_enable_fortran( REQUIRED NO_MODULE_DIRECTORY ) +### Determine ocean model precision +if( NOT DEFINED OCEAN_PREC ) + if( HAVE_SINGLE_PRECISION ) + set(OCEAN_PREC SP) + else() + set(OCEAN_PREC DP) + endif() +endif() +string( TOLOWER "${OCEAN_PREC}" ocean_prec ) + ### Dependencies ecbuild_find_package( fiat REQUIRED ) @@ -55,7 +65,7 @@ ecbuild_add_option( FEATURE UNWAM ecbuild_add_option( FEATURE OCEAN_COUPLING DEFAULT ON DESCRIPTION "Support ocean coupling" - CONDITION ${PNAME}_OCEANMODEL_LIBRARIES ) + REQUIRED_PACKAGES "nemo_${ocean_prec}" ) ecbuild_add_option( FEATURE ECWAM_LAUNCH DEFAULT ON diff --git a/src/ecwam/CMakeLists.txt b/src/ecwam/CMakeLists.txt index 9f2ce99e3..78724fd75 100644 --- a/src/ecwam/CMakeLists.txt +++ b/src/ecwam/CMakeLists.txt @@ -404,14 +404,13 @@ if( HAVE_MULTIO ) list(APPEND ECWAM_DEFINITIONS WAM_HAVE_MULTIO) endif() +set( ${PNAME}_OCEANMODEL_LIBRARIES "" ) if( HAVE_OCEAN_COUPLING ) list(APPEND ECWAM_DEFINITIONS WITH_NEMO ) if( ${PNAME}_OCEANMODEL_HAVE_SINGLE_PRECISION ) list(APPEND ECWAM_DEFINITIONS PARKIND1_SINGLE_NEMO ) endif() -else() - unset( ${PNAME}_OCEANMODEL_LIBRARIES ) - unset( ${PNAME}_OCEANMODEL_INCLUDE_DIRS ) + set( ${PNAME}_OCEANMODEL_LIBRARIES nemogcmcoup.${OCEAN_PREC} ) endif() if( HAVE_ECFLOW ) @@ -430,7 +429,6 @@ ecbuild_add_library( field_api_${prec} $<${HAVE_ECFLOW}:ecflow_lightf> PUBLIC_INCLUDES $ - PRIVATE_INCLUDES ${${PNAME}_OCEANMODEL_INCLUDE_DIRS} PRIVATE_DEFINITIONS ${ECWAM_PRIVATE_DEFINITIONS} PUBLIC_DEFINITIONS ${ECWAM_DEFINITIONS} ) From 6c7eb07cb5ec5d543522b7c0bab4a7585d57525a Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Wed, 6 Mar 2024 21:08:05 +0000 Subject: [PATCH 08/13] INTEL: add compiler flags for bit-identical IFS builds --- cmake/ecwam_compile_flags.cmake | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cmake/ecwam_compile_flags.cmake b/cmake/ecwam_compile_flags.cmake index bc81e5a5d..ff24580d0 100644 --- a/cmake/ecwam_compile_flags.cmake +++ b/cmake/ecwam_compile_flags.cmake @@ -23,6 +23,9 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") set(checkbounds_flags "-check bounds") set(initsnan_flags "-init=snan") set(fpe_flags "-fpe0") + set(vectorization_flags "-march=core-avx2 -no-fma") + set(fpmodel_flags "-fp-model precise -fp-speculation=safe") + set(transcendentals_flags "-fast-transcendentals") elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC") set(autopromote_flags "-r8") @@ -38,6 +41,15 @@ endif() if( NOT HAVE_SINGLE_PRECISION ) ecbuild_add_fortran_flags( "${autopromote_flags}" NAME autopromote ) endif() +if( DEFINED vectorization_flags ) + ecbuild_add_fortran_flags( "${vectorization_flags}" NAME vectorization ) +endif() +if( DEFINED fpmodel_flags ) + ecbuild_add_fortran_flags( "${fpmodel_flags}" NAME fpmodel ) +endif() +if( DEFINED transcendentals_flags ) + ecbuild_add_fortran_flags( "${transcendentals_flags}" NAME transcendentals ) +endif() ## Debug flags for NVHPC are applied selectively to sourcefiles in src/ecwam/CMakeLists.txt if( CMAKE_BUILD_TYPE MATCHES "Debug" AND NOT CMAKE_Fortran_COMPILER_ID MATCHES PGI|NVHPC ) From e062e51f3d116d29c461d7a95aba749641a644b4 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Thu, 14 Mar 2024 16:47:24 +0000 Subject: [PATCH 09/13] NVHPC: add vectorization flags --- cmake/ecwam_compile_flags.cmake | 2 ++ src/ecwam/CMakeLists.txt | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cmake/ecwam_compile_flags.cmake b/cmake/ecwam_compile_flags.cmake index ff24580d0..5d67e6d6d 100644 --- a/cmake/ecwam_compile_flags.cmake +++ b/cmake/ecwam_compile_flags.cmake @@ -30,6 +30,8 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC") set(autopromote_flags "-r8") set(fpe_flags "-Ktrap=fp") + set(vectorization_flags "-O3 -fast") + string(REPLACE "-O2" "" ${PNAME}_Fortran_FLAGS_BIT ${${PNAME}_Fortran_FLAGS_BIT}) # set(checkbounds_flags "-Mbounds") # Added by default by CMake in NVHPC debug builds elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Flang") diff --git a/src/ecwam/CMakeLists.txt b/src/ecwam/CMakeLists.txt index 78724fd75..9a39eab0b 100644 --- a/src/ecwam/CMakeLists.txt +++ b/src/ecwam/CMakeLists.txt @@ -451,9 +451,9 @@ if( CMAKE_Fortran_COMPILER_ID MATCHES Intel ) set_source_files_properties( propconnect.F90 PROPERTIES COMPILE_OPTIONS "-fp-model;strict" ) elseif( CMAKE_Fortran_COMPILER_ID MATCHES GNU ) set_source_files_properties( mubuf.F90 PROPERTIES COMPILE_OPTIONS "-ffp-contract=off" ) -elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC") +elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC" AND CMAKE_BUILD_TYPE MATCHES "Bit") set_source_files_properties( - sbottom.F90 PROPERTIES COMPILE_FLAGS " -g -O1 -Mflushz -Mno-signed-zeros -Mstack_arrays " + sbottom.F90 PROPERTIES COMPILE_FLAGS " -g -O1 -Mflushz -Mno-signed-zeros " ) endif() From acbb988dd69284726a49d34f9d11b1669bd217ad Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Thu, 14 Mar 2024 16:50:24 +0000 Subject: [PATCH 10/13] CMAKE: use PNAME_LANG_FLAGS --- CMakeLists.txt | 2 ++ cmake/ecwam_compile_flags.cmake | 8 +++++++- cmake/ecwam_init_flags.cmake | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 cmake/ecwam_init_flags.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 652388579..30e0559d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,8 @@ if( NOT ECWAM_PROJECT_NAME ) set( ECWAM_PROJECT_NAME ecwam ) endif() +string( TOUPPER ${ECWAM_PROJECT_NAME} PNAME ) +set( ${PNAME}_ECBUILD_COMPILE_FLAGS ${CMAKE_CURRENT_SOURCE_DIR}/cmake/ecwam_init_flags.cmake CACHE FILEPATH "") project( ${ECWAM_PROJECT_NAME} LANGUAGES Fortran C CXX ) include( ecwam_macros ) diff --git a/cmake/ecwam_compile_flags.cmake b/cmake/ecwam_compile_flags.cmake index 5d67e6d6d..13a5928ab 100644 --- a/cmake/ecwam_compile_flags.cmake +++ b/cmake/ecwam_compile_flags.cmake @@ -6,6 +6,11 @@ # granted to it by virtue of its status as an intergovernmental organisation # nor does it submit to any jurisdiction. +# Capture ecbuild defaults and/or flags set by a toolchain +set( ${PNAME}_Fortran_FLAGS ${ECBUILD_Fortran_FLAGS} ) +set( ${PNAME}_Fortran_FLAGS_BIT ${ECBUILD_Fortran_FLAGS_BIT} ) +set( ${PNAME}_Fortran_FLAGS_DEBUG ${ECBUILD_Fortran_FLAGS_DEBUG} ) + if(CMAKE_Fortran_COMPILER_ID MATCHES "Cray") set(autopromote_flags "-sreal64") set(checkbounds_flags "-Rb") @@ -44,7 +49,8 @@ if( NOT HAVE_SINGLE_PRECISION ) ecbuild_add_fortran_flags( "${autopromote_flags}" NAME autopromote ) endif() if( DEFINED vectorization_flags ) - ecbuild_add_fortran_flags( "${vectorization_flags}" NAME vectorization ) + # vectorization flags must be per-sourcefile overrideable, so are set via ${PNAME}_Fortran_FLAGS + set( ${PNAME}_Fortran_FLAGS_BIT "${${PNAME}_Fortran_FLAGS_BIT} ${vectorization_flags}" ) endif() if( DEFINED fpmodel_flags ) ecbuild_add_fortran_flags( "${fpmodel_flags}" NAME fpmodel ) diff --git a/cmake/ecwam_init_flags.cmake b/cmake/ecwam_init_flags.cmake new file mode 100644 index 000000000..12d93af36 --- /dev/null +++ b/cmake/ecwam_init_flags.cmake @@ -0,0 +1,9 @@ +# (C) Copyright 2022- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# Empty file to trigger ecbuild to use ${PNAME}__FLAGS \ No newline at end of file From bdb065a101ba602641bcf17bb26515774c7d3a23 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Fri, 15 Mar 2024 12:13:19 +0000 Subject: [PATCH 11/13] GNU: add architecture compiler flag --- cmake/ecwam_compile_flags.cmake | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmake/ecwam_compile_flags.cmake b/cmake/ecwam_compile_flags.cmake index 13a5928ab..f339ac7e5 100644 --- a/cmake/ecwam_compile_flags.cmake +++ b/cmake/ecwam_compile_flags.cmake @@ -76,6 +76,9 @@ if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU") if( NOT CMAKE_Fortran_COMPILER_VERSION VERSION_LESS 10 ) ecbuild_add_fortran_flags( "-fallow-argument-mismatch" NAME argument_mismatch ) endif() + if( NOT CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64" ) + ecbuild_add_fortran_flags( "-m64" NAME gnu_arch ) + endif() endif() if(CMAKE_Fortran_COMPILER_ID MATCHES "Flang") From 9b0a36bda7fe0ba9bf4ad674d3f811a3c325b9c5 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Fri, 15 Mar 2024 13:33:20 +0000 Subject: [PATCH 12/13] NVHPC: undo debug flag workaround --- cmake/ecwam_compile_flags.cmake | 15 +++++++-------- src/ecwam/CMakeLists.txt | 21 ++++----------------- 2 files changed, 11 insertions(+), 25 deletions(-) diff --git a/cmake/ecwam_compile_flags.cmake b/cmake/ecwam_compile_flags.cmake index f339ac7e5..f46857574 100644 --- a/cmake/ecwam_compile_flags.cmake +++ b/cmake/ecwam_compile_flags.cmake @@ -7,9 +7,9 @@ # nor does it submit to any jurisdiction. # Capture ecbuild defaults and/or flags set by a toolchain -set( ${PNAME}_Fortran_FLAGS ${ECBUILD_Fortran_FLAGS} ) -set( ${PNAME}_Fortran_FLAGS_BIT ${ECBUILD_Fortran_FLAGS_BIT} ) -set( ${PNAME}_Fortran_FLAGS_DEBUG ${ECBUILD_Fortran_FLAGS_DEBUG} ) +set( ${PNAME}_Fortran_FLAGS "${${PNAME}_Fortran_FLAGS} ${ECBUILD_Fortran_FLAGS}" ) +set( ${PNAME}_Fortran_FLAGS_BIT "${${PNAME}_Fortran_FLAGS_BIT} ${ECBUILD_Fortran_FLAGS_BIT}" ) +set( ${PNAME}_Fortran_FLAGS_DEBUG "${${PNAME}_Fortran_FLAGS_DEBUG} ${ECBUILD_Fortran_FLAGS_DEBUG}" ) if(CMAKE_Fortran_COMPILER_ID MATCHES "Cray") set(autopromote_flags "-sreal64") @@ -37,7 +37,7 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC") set(fpe_flags "-Ktrap=fp") set(vectorization_flags "-O3 -fast") string(REPLACE "-O2" "" ${PNAME}_Fortran_FLAGS_BIT ${${PNAME}_Fortran_FLAGS_BIT}) -# set(checkbounds_flags "-Mbounds") # Added by default by CMake in NVHPC debug builds + set(checkbounds_flags "-Mbounds") elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Flang") set(autopromote_flags "-fdefault-real-8") @@ -59,16 +59,15 @@ if( DEFINED transcendentals_flags ) ecbuild_add_fortran_flags( "${transcendentals_flags}" NAME transcendentals ) endif() -## Debug flags for NVHPC are applied selectively to sourcefiles in src/ecwam/CMakeLists.txt -if( CMAKE_BUILD_TYPE MATCHES "Debug" AND NOT CMAKE_Fortran_COMPILER_ID MATCHES PGI|NVHPC ) +if( CMAKE_BUILD_TYPE MATCHES "Debug" ) foreach( debug_flag fpe initsnan checkbounds ) if( ${debug_flag}_flags ) - ecbuild_add_fortran_flags( "${${debug_flag}_flags}" NAME ${debug_flag} ) + set( ${PNAME}_Fortran_FLAGS_DEBUG "${${PNAME}_Fortran_FLAGS_DEBUG} ${${debug_flag}_flags}" ) endif() endforeach() if(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") # In case '-check all' has been added, we need to remove the '-check arg_temp_created' warnings - ecbuild_add_fortran_flags( "-check noarg_temp_created" NAME check_noarg_temp_created BUILD DEBUG ) # the BUILD DEBUG argument makes sure it is appended after '-check all' + set( ${PNAME}_Fortran_FLAGS_DEBUG "${${PNAME}_Fortran_FLAGS_DEBUG} -check noarg_temp_created" ) endif() endif() diff --git a/src/ecwam/CMakeLists.txt b/src/ecwam/CMakeLists.txt index 9a39eab0b..6c015e83a 100644 --- a/src/ecwam/CMakeLists.txt +++ b/src/ecwam/CMakeLists.txt @@ -455,6 +455,10 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC" AND CMAKE_BUILD_TYPE MATCHE set_source_files_properties( sbottom.F90 PROPERTIES COMPILE_FLAGS " -g -O1 -Mflushz -Mno-signed-zeros " ) +elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC" AND CMAKE_BUILD_TYPE MATCHES "Debug") + string(REPLACE "-Ktrap=fp" "" ${PNAME}_Fortran_FLAGS_DEBUG ${${PNAME}_Fortran_FLAGS_DEBUG}) + set_source_files_properties( outbeta.F90 PROPERTIES COMPILE_OPTIONS "${${PNAME}_Fortran_FLAGS_DEBUG} -Ktrap=divz") + set_source_files_properties( secondhh.F90 PROPERTIES COMPILE_OPTIONS "${${PNAME}_Fortran_FLAGS_DEBUG} -Ktrap=inv,ovf") endif() ### The file grib2wgrid.F90 is sensitive to optimizations in single precision builds. @@ -464,20 +468,3 @@ endif() if( CMAKE_Fortran_COMPILER_ID MATCHES Intel AND HAVE_SINGLE_PRECISION ) set_source_files_properties( grib2wgrid.F90 PROPERTIES COMPILE_OPTIONS "-fp-model;strict" ) endif() - -### NVHPC debug flags applied selectively to sourcefiles to avoid single-precision overflow -if( CMAKE_Fortran_COMPILER_ID MATCHES PGI|NVHPC AND CMAKE_BUILD_TYPE MATCHES "Debug" ) - foreach( debug_flag initsnan checkbounds ) - if( ${debug_flag}_flags ) - ecbuild_add_fortran_flags( "${${debug_flag}_flags}" NAME ${debug_flag} ) - endif() - endforeach() - - list(REMOVE_ITEM ecwam_srcs outbeta.F90 secondhh.F90) - if( fpe_flags ) - set_source_files_properties( ${ecwam_srcs} PROPERTIES COMPILE_OPTIONS ${fpe_flags} ) - set_source_files_properties( outbeta.F90 PROPERTIES COMPILE_OPTIONS "-Ktrap=divz" ) - set_source_files_properties( secondhh.F90 PROPERTIES COMPILE_OPTIONS "-Ktrap=inv,ovf" ) - endif() - list(APPEND ecwam_srcs outbeta.F90 secondhh.F90) -endif() From d04a810068c6ebfbee37fc194bea0a1d13661ed8 Mon Sep 17 00:00:00 2001 From: Ahmad Nawab Date: Fri, 15 Mar 2024 15:31:45 +0000 Subject: [PATCH 13/13] INTEL: restore heap-arrays flag --- cmake/ecwam_compile_flags.cmake | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmake/ecwam_compile_flags.cmake b/cmake/ecwam_compile_flags.cmake index f46857574..d5a37b2e6 100644 --- a/cmake/ecwam_compile_flags.cmake +++ b/cmake/ecwam_compile_flags.cmake @@ -31,6 +31,7 @@ elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel") set(vectorization_flags "-march=core-avx2 -no-fma") set(fpmodel_flags "-fp-model precise -fp-speculation=safe") set(transcendentals_flags "-fast-transcendentals") + set(heap_arrays_flags "-heap-arrays 32") elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI|NVHPC") set(autopromote_flags "-r8") @@ -58,6 +59,9 @@ endif() if( DEFINED transcendentals_flags ) ecbuild_add_fortran_flags( "${transcendentals_flags}" NAME transcendentals ) endif() +if( DEFINED heap_arrays_flags ) + ecbuild_add_fortran_flags( "${heap_arrays_flags}" NAME heap_arrays ) +endif() if( CMAKE_BUILD_TYPE MATCHES "Debug" ) foreach( debug_flag fpe initsnan checkbounds )