diff --git a/CMakeLists.txt b/CMakeLists.txt index 8ca8679c1..3eff090bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ find_package( ecbuild 3.4 REQUIRED HINTS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CUR project( ectrans LANGUAGES C Fortran CXX ) include( ectrans_macros ) -option(IFS_SHARED_LIBS "Build shared libraries (overrides BUILD_SHARED_LIBS)" ON) +option(IFS_SHARED_LIBS "Build shared libraries (overrides BUILD_SHARED_LIBS)" OFF) set(BUILD_SHARED_LIBS ${IFS_SHARED_LIBS}) ecbuild_enable_fortran( REQUIRED NO_MODULE_DIRECTORY ) diff --git a/src/programs/CMakeLists.txt b/src/programs/CMakeLists.txt index 4dc9d4888..fa700a4ef 100644 --- a/src/programs/CMakeLists.txt +++ b/src/programs/CMakeLists.txt @@ -46,6 +46,22 @@ ecbuild_add_library( PRECOPT PUBLIC_LIBS fiat trans_sp trans_dp ) +ecbuild_add_library( + TARGET ectrans_interfaces_gpu + LINKER_LANGUAGE Fortran + SOURCES wrappers/dir_trans.F90 + wrappers/inv_trans.F90 + wrappers/setup_trans0.F90 + wrappers/setup_trans.F90 + wrappers/trans_inq.F90 + PUBLIC_INCLUDES $ + $ + $ + $ + PRIVATE_DEFINITIONS SYMBOLSUFFIX + PRECOPT + PUBLIC_LIBS fiat trans_gpu_sp trans_gpu_dp +) foreach( program ectrans-benchmark ectrans-benchmark-ifs ) @@ -77,7 +93,7 @@ foreach( program ectrans-benchmark ectrans-benchmark-ifs ) parkind_${prec} trans_gpu_sp trans_gpu_dp - ectrans_interfaces + ectrans_interfaces_gpu ) endif() endforeach( prec ) diff --git a/src/trans/cpu/external/setup_trans.F90 b/src/trans/cpu/external/setup_trans.F90 index 79ac3ef3e..0d136be41 100644 --- a/src/trans/cpu/external/setup_trans.F90 +++ b/src/trans/cpu/external/setup_trans.F90 @@ -1,6 +1,6 @@ ! (C) Copyright 2000- ECMWF. ! (C) Copyright 2000- Meteo-France. -! +! ! 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 @@ -139,7 +139,7 @@ SUBROUTINE SETUP_TRANS(KSMAX,KDGL,KDLON,KLOEN,LDSPLIT,PSTRET,& INTEGER(KIND=JPIM) ,INTENT(IN) :: KSMAX,KDGL INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KDLON INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KLOEN(:) -LOGICAL ,OPTIONAL,INTENT(IN) :: LDSPLIT +LOGICAL ,OPTIONAL,INTENT(IN) :: LDSPLIT INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(IN) :: KTMAX INTEGER(KIND=JPIM) ,OPTIONAL,INTENT(OUT):: KRESOL REAL(KIND=JPRB) ,OPTIONAL,INTENT(IN) :: PWEIGHT(:) diff --git a/src/trans/gpu/external/setup_trans.F90 b/src/trans/gpu/external/setup_trans.F90 index d4115a00a..97a456beb 100755 --- a/src/trans/gpu/external/setup_trans.F90 +++ b/src/trans/gpu/external/setup_trans.F90 @@ -8,13 +8,14 @@ ! nor does it submit to any jurisdiction. ! #include "renames.inc" -#ifdef MODULE -MODULE & -#endif +#ifndef INMODULE SUBROUTINE SETUP_TRANS(KSMAX,KDGL,KDLON,KLOEN,LDSPLIT,PSTRET,& & KTMAX,KRESOL,PWEIGHT,LDGRIDONLY,LDUSERPNM,LDKEEPRPNM,LDUSEFLT,& & LDSPSETUPONLY,LDPNMONLY,LDUSEFFTW,& & LDLL,LDSHIFTLL,CDIO_LEGPOL,CDLEGPOLFNAME,KLEGPOLPTR,KLEGPOLPTR_LEN) +#else +MODULE PROCEDURE SETUP_TRANS +#endif !**** *SETUP_TRANS* - Setup transform package for specific resolution ! Purpose. @@ -153,6 +154,7 @@ SUBROUTINE SETUP_TRANS(KSMAX,KDGL,KDLON,KLOEN,LDSPLIT,PSTRET,& IMPLICIT NONE +#ifndef INMODULE ! Dummy arguments INTEGER(KIND=JPIM) ,INTENT(IN) :: KSMAX,KDGL @@ -176,6 +178,7 @@ SUBROUTINE SETUP_TRANS(KSMAX,KDGL,KDLON,KLOEN,LDSPLIT,PSTRET,& CHARACTER(LEN=*),OPTIONAL,INTENT(IN):: CDLEGPOLFNAME TYPE(C_PTR) ,OPTIONAL,INTENT(IN) :: KLEGPOLPTR INTEGER(C_SIZE_T) ,OPTIONAL,INTENT(IN) :: KLEGPOLPTR_LEN +#endif !ifndef INTERFACE @@ -1020,5 +1023,8 @@ SUBROUTINE SETUP_TRANS(KSMAX,KDGL,KDLON,KLOEN,LDSPLIT,PSTRET,& !endif INTERFACE ENDIF - +#ifndef INMODULE END SUBROUTINE SETUP_TRANS +#else +END PROCEDURE SETUP_TRANS +#endif diff --git a/src/trans/gpu/internal/pe2set_mod.F90 b/src/trans/gpu/internal/pe2set_mod.F90 index f21e37f6c..34fc11603 100755 --- a/src/trans/gpu/internal/pe2set_mod.F90 +++ b/src/trans/gpu/internal/pe2set_mod.F90 @@ -87,7 +87,6 @@ SUBROUTINE PE2SET(KPE,KPRGPNS,KPRGPEW,KPRTRW,KPRTRV) !* 1. Check input argument for validity ! --------------------------------- - IF(KPE <= 0.OR.KPE > NPROC) THEN WRITE(*,'(A,2I8)') ' PE2SET INVALID ARGUMENT ',KPE,NPROC CALL ABORT_TRANS(' PE2SET INVALID ARGUMENT ') diff --git a/src/trans/gpu/internal/sump_trans0_mod.F90 b/src/trans/gpu/internal/sump_trans0_mod.F90 index fdc91594d..7955202f8 100755 --- a/src/trans/gpu/internal/sump_trans0_mod.F90 +++ b/src/trans/gpu/internal/sump_trans0_mod.F90 @@ -41,8 +41,8 @@ SUBROUTINE SUMP_TRANS0 LLP2 = NPRINTLEV>1 IF(LLP1) WRITE(NOUT,*) '=== ENTER ROUTINE SUMP_TRANS0 ===' - NPROC = NPRGPNS*NPRGPEW +WRITE(NOUT,*) NPROC NPRTRNS = NPRTRW IF(MOD(NPROC,NPRTRW) /= 0 .OR. NPRTRW > NPROC) THEN CALL ABORT_TRANS('SUMP_TRANS0: NPROC INCONSISTENT WITH NPRTRW') @@ -77,6 +77,7 @@ SUBROUTINE SUMP_TRANS0 N_REGIONS(:)=NPRGPEW N_REGIONS_EW=NPRGPEW ENDIF + CALL PE2SET(MYPROC,MY_REGION_NS,MY_REGION_EW,MYSETW,MYSETV) IF(LLP1) WRITE(NOUT,*)'MYPROC=',MYPROC,'MY_REGION_NS =',MY_REGION_NS,& & ' MY_REGION_EW=',MY_REGION_EW,' MYSETW=',MYSETW,' MYSETV=',MYSETV diff --git a/src/trans/include/ectrans/renames.inc b/src/trans/include/ectrans/renames.inc index fa9fa9f9e..49a1c319f 100644 --- a/src/trans/include/ectrans/renames.inc +++ b/src/trans/include/ectrans/renames.inc @@ -144,6 +144,7 @@ #define FFTB_PLAN SUFFIXIZE(FFTB_PLAN_VER) #define FFTB_TYPE SUFFIXIZE(FFTB_TYPE_VER) #define BLUESTEIN_FFT SUFFIXIZE(BLUESTEIN_FFT_VER) +#define BLUESTEIN_MOD SUFFIXIZE(BLUESTEIN_MOD_VER) #define gpnorm_trans_gpu SUFFIXIZE(gpnorm_trans_gpu) #define GPNORM_TRANS_GPU SUFFIXIZE(GPNORM_TRANS_GPU) #define dir_trans SUFFIXIZE(dir_trans_ver)