Skip to content

Commit

Permalink
Fix to avoid compilation of external routines outside of the ectrans …
Browse files Browse the repository at this point in the history
…module
  • Loading branch information
piotrows committed Feb 6, 2024
1 parent 1f5188b commit e7f11ee
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 18 deletions.
89 changes: 75 additions & 14 deletions src/trans/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,23 @@ ecbuild_list_add_pattern( LIST trans_src_common
)
ecbuild_list_add_pattern( LIST trans_src_ext
GLOB
external/dir__trans.F90
external/inv__trans.F90
external/dir_transad.F90
external/inv_transad.F90
external/trans__inq.F90
external/setup__trans.F90
external/setup__trans0.F90
external/dist_spec.F90
external/gath_spec.F90
module/*
external/dir__trans.F90
external/inv__trans.F90
external/dir_transad.F90
external/inv_transad.F90
external/trans__inq.F90
external/setup__trans.F90
external/setup__trans0.F90
external/dist_spec.F90
external/gath_spec.F90
QUIET
)

ecbuild_list_add_pattern( LIST trans_src_ext_mod
GLOB
module/*
QUIET
)

function(DEFINE_CODE_SPEC)
set (oneValueArgs INDIR OUTDIR SUBDIR BUILDTYPE SUFFIX)
Expand Down Expand Up @@ -110,20 +114,48 @@ define_code_spec(INDIR ${PROJECT_SOURCE_DIR}/src OUTDIR "${CMAKE_BINARY_DIR}/sp
set(trans_sources ${trans_src})
list(TRANSFORM trans_sources PREPEND ${CMAKE_BINARY_DIR}/specialized_src/${buildtype}/trans/)
list(TRANSFORM trans_sources APPEND .pp.F90)
define_code_spec(INDIR ${PROJECT_SOURCE_DIR}/src OUTDIR "${CMAKE_BINARY_DIR}/specialized_src" BUILDTYPE ${buildtype} SUBDIR "trans/" SRCFILES ${trans_src_ext} )

set(trans_sources_listname "trans_sources_${buildtype}")
set("${trans_sources_listname}" ${trans_sources} PARENT_SCOPE)
message(STATUS "Trans source list name:" ${trans_sources_listname})

define_code_spec(INDIR ${PROJECT_SOURCE_DIR}/src OUTDIR "${CMAKE_BINARY_DIR}/specialized_src" BUILDTYPE ${buildtype} SUBDIR "trans/" SRCFILES ${trans_src_ext} )
set(trans_sources_ext ${trans_src_ext})
list(TRANSFORM trans_sources_ext PREPEND ${CMAKE_BINARY_DIR}/specialized_src/${buildtype}/trans/)
set(trans_sources_ext_listname "trans_sources_ext_${buildtype}")
message(STATUS "Trans source list name:" ${trans_sources_ext_listname})
set("${trans_sources_ext_listname}" ${trans_sources_ext} PARENT_SCOPE)

define_code_spec(INDIR ${PROJECT_SOURCE_DIR}/src OUTDIR "${CMAKE_BINARY_DIR}/specialized_src" BUILDTYPE ${buildtype} SUBDIR "trans/" SRCFILES ${trans_src_ext_mod} )
set(trans_sources_ext_mod ${trans_src_ext_mod})
list(TRANSFORM trans_sources_ext_mod PREPEND ${CMAKE_BINARY_DIR}/specialized_src/${buildtype}/trans/)
set(trans_sources_ext_mod_listname "trans_sources_ext_mod_${buildtype}")
message(STATUS "Trans source list name:" ${trans_sources_ext_mod_listname})
set("${trans_sources_ext_mod_listname}" ${trans_sources_ext_mod} PARENT_SCOPE)
endfunction(GENERATE_TRANS_BUILD)


ecbuild_add_library(
TARGET trans_common
LINKER_LANGUAGE Fortran
SOURCES ${trans_src_common}
${CMAKE_CURRENT_BINARY_DIR}/internal/common/ectrans_version_mod.F90
PUBLIC_INCLUDES $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/trans/include>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/trans/include/ectrans>
$<INSTALL_INTERFACE:include/ectrans>
$<INSTALL_INTERFACE:include>
PRIVATE_DEFINITIONS SYMBOLSUFFIX=${prec}
# JPRB=${precdef}
# jprb=${precdef}
PARKIND1=EC_PARKIND
parkind1=EC_PARKIND
PUBLIC_LIBS fiat
)
ectrans_target_fortran_module_directory(
TARGET trans_common
MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/module/trans_common
INSTALL_DIRECTORY module/trans_common
)

foreach( prec dp sp )
if( HAVE_${prec} )
Expand All @@ -139,10 +171,9 @@ foreach( prec dp sp )
#message(STATUS "Preprocessed sources ext:" ${trans_sources_ext_${prec}})
#message(STATUS "Preprocessed sources:" ${trans_sources_${prec}})
ecbuild_add_library(
TARGET trans_${prec}
TARGET trans_fake_${prec}
LINKER_LANGUAGE Fortran
SOURCES ${trans_sources_${prec}}
${trans_src_common}
${trans_sources_ext_${prec}}
${CMAKE_CURRENT_BINARY_DIR}/internal/common/ectrans_version_mod.F90
PUBLIC_INCLUDES $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/trans/include>
Expand All @@ -155,7 +186,32 @@ foreach( prec dp sp )
jprb=${precdef}
PARKIND1=EC_PARKIND
parkind1=EC_PARKIND
PUBLIC_LIBS fiat
PUBLIC_LIBS fiat trans_common
)
ectrans_target_fortran_module_directory(
TARGET trans_fake_${prec}
MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/module/trans_fake_${prec}
INSTALL_DIRECTORY module/trans_fake_${prec}
)

ecbuild_add_library(
TARGET trans_${prec}
LINKER_LANGUAGE Fortran
SOURCES ${trans_sources_${prec}}
${trans_sources_ext_mod_${prec}}
${CMAKE_CURRENT_BINARY_DIR}/internal/common/ectrans_version_mod.F90
PUBLIC_INCLUDES $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/trans/include>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/trans/include/ectrans>
$<INSTALL_INTERFACE:include/ectrans>
$<INSTALL_INTERFACE:include>
DEPENDS trans_fake_${prec}
PRIVATE_INCLUDES ${CMAKE_BINARY_DIR}/specialized_src/${prec}/trans/external
PRIVATE_DEFINITIONS SYMBOLSUFFIX=${prec}
JPRB=${precdef}
jprb=${precdef}
PARKIND1=EC_PARKIND
parkind1=EC_PARKIND
PUBLIC_LIBS fiat trans_common
)

ectrans_target_fortran_module_directory(
Expand All @@ -164,6 +220,7 @@ foreach( prec dp sp )
INSTALL_DIRECTORY module/trans_${prec}
)
target_link_libraries( trans_${prec} PUBLIC fiat parkind_${prec} )
target_link_libraries( trans_fake_${prec} PUBLIC fiat parkind_${prec} )
if( HAVE_FFTW )
set( FFTW_LINK PRIVATE )
if( LAPACK_${prec} MATCHES "mkl" AND NOT FFTW_LIBRARIES MATCHES "mkl" )
Expand All @@ -175,9 +232,13 @@ foreach( prec dp sp )
target_link_libraries( trans_${prec} ${FFTW_LINK} ${FFTW_LIBRARIES} )
target_include_directories( trans_${prec} PRIVATE ${FFTW_INCLUDE_DIRS} )
target_compile_definitions( trans_${prec} PRIVATE WITH_FFTW )
target_link_libraries( trans_fake_${prec} ${FFTW_LINK} ${FFTW_LIBRARIES} )
target_include_directories( trans_fake_${prec} PRIVATE ${FFTW_INCLUDE_DIRS} )
target_compile_definitions( trans_fake_${prec} PRIVATE WITH_FFTW )
endif()
ecbuild_debug("target_link_libraries( trans_${prec} ${LAPACK_LINK} ${LAPACK_${prec}} )")
target_link_libraries( trans_${prec} ${LAPACK_LINK} ${LAPACK_${prec}} )
target_link_libraries( trans_fake_${prec} ${LAPACK_LINK} ${LAPACK_${prec}} )
if( HAVE_OMP )
ecbuild_debug("target_link_libraries( trans_${prec} PRIVATE OpenMP::OpenMP_Fortran )")
target_link_libraries( trans_${prec} PRIVATE OpenMP::OpenMP_Fortran )
Expand Down
3 changes: 2 additions & 1 deletion src/trans/external/dist_spec.F90
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ SUBROUTINE DIST_SPEC(PSPECG,KFDISTG,KFROM,KVSET,KRESOL,PSPEC,&
REAL(KIND=JPRB) ,OPTIONAL, INTENT(IN) :: PSPECG(:,:)
INTEGER(KIND=JPIM) , INTENT(IN) :: KFDISTG
INTEGER(KIND=JPIM) , INTENT(IN) :: KFROM(:)
INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KVSET(:)
INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KVSET(1:)
INTEGER(KIND=JPIM) ,OPTIONAL, INTENT(IN) :: KRESOL
REAL(KIND=JPRB) ,OPTIONAL, INTENT(OUT) :: PSPEC(:,:)
LOGICAL ,OPTIONAL, INTENT(IN) :: LDIM1_IS_FLD
Expand Down Expand Up @@ -167,6 +167,7 @@ SUBROUTINE DIST_SPEC(PSPECG,KFDISTG,KFROM,KVSET,KRESOL,PSPEC,&

IF(PRESENT(KVSET)) THEN
IF(UBOUND(KVSET,1) < KFDISTG) THEN
PRINT *,'KFVSET LBOUND',LBOUND(KVSET,1),'KFVSET UBOUND',UBOUND(KVSET,1),'KFDISTG',KFDISTG
CALL ABORT_TRANS('DIST_SPEC: KVSET TOO SHORT!')
ENDIF
DO J=1,KFDISTG
Expand Down
6 changes: 3 additions & 3 deletions tests/trans/test_adjoint.F90
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ PROGRAM TEST_ADJOINT
#include "inv_transad.inc"
#include "dist_grid.inc"
#include "gath_spec.inc"
#include "dist_spec.h"
#include "dist_spec.inc"
!#include "setup_trans0.h"
!#include "setup_trans.h"
!#include "trans_inq.h"
Expand Down Expand Up @@ -196,7 +196,7 @@ PROGRAM TEST_ADJOINT

CALL DIST_GRID(PGPG=ZRANDGP,KFDISTG=1,KFROM=ITO,PGP=ZPERT,KPROMA=NPROMA)
CALL DIST_SPEC(PSPECG=ZSPECXG,KFDISTG=NFLEVG,KFROM=ITO,PSPEC=ZSPECX,&
& KVSET=IVSET(1:NFLEVG))
& KVSET=IVSET(1:NFLEVG),PRECBACKEND_FLAG=BACKEND_FLAG)

!ZWALL=TIMEF()
!ZWALL0=ZWALL
Expand All @@ -210,7 +210,7 @@ PROGRAM TEST_ADJOINT
DO JREP=1,NREP

CALL DIST_SPEC(PSPECG=ZSPECYG,KFDISTG=NFLEVG,KFROM=ITO,PSPEC=ZSPECY,&
& KVSET=IVSET(1:NFLEVG))
& KVSET=IVSET(1:NFLEVG),PRECBACKEND_FLAG=BACKEND_FLAG)
! Direct caclulations

CALL INV_TRANS(PSPSCALAR=ZSPECX,PSPVOR=ZVORX,PSPDIV=ZDIVX,PGP=ZGX,&
Expand Down

0 comments on commit e7f11ee

Please sign in to comment.