Skip to content

Commit

Permalink
Merge pull request #10 from ecmwf-ifs/naan-nemo-sp-fix
Browse files Browse the repository at this point in the history
Fix for building with single-precision NEMO
  • Loading branch information
wdeconinck authored Mar 4, 2024
2 parents 141c5cd + 07cc270 commit 74eb7bc
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 15 deletions.
8 changes: 1 addition & 7 deletions src/ecwam/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -356,17 +356,11 @@ list( APPEND ecwam_srcs
z0wave.F90
)

# check for mixed precision build
set(MIXED_PRECISION 0)
if(${HAVE_SINGLE_PRECISION} AND NOT ${PNAME}_OCEANMODEL_HAVE_SINGLE_PRECISION)
set(MIXED_PRECISION 1)
endif()

if( HAVE_GEN_DERIV_TYPES )
list( APPEND ecwam_srcs ${CMAKE_CURRENT_BINARY_DIR}/yowfield_mod.F90)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/yowfield_mod.F90
COMMAND ${FYPP} -m io -m yaml -m os -DMIXED_PRECISION=${MIXED_PRECISION} ${CMAKE_CURRENT_SOURCE_DIR}/yowfield_mod.fypp > yowfield_mod.F90
COMMAND ${FYPP} -m io -m yaml -m os ${CMAKE_CURRENT_SOURCE_DIR}/yowfield_mod.fypp > yowfield_mod.F90
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/yowfield_mod.fypp
VERBATIM)
else()
Expand Down
18 changes: 16 additions & 2 deletions src/ecwam/yowfield_mod.F90
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
MODULE YOWFIELD_MOD

USE PARKIND_WAVE, ONLY : JWRB, JWIM, JWRO
USE FIELD_MODULE, ONLY : FIELD_3RB, FIELD_2IM, FIELD_2RB, FIELD_3IM, FIELD_4RB, FIELD_4IM, FIELD_2RD
USE FIELD_MODULE, ONLY : FIELD_3RB, FIELD_2IM, FIELD_2RB, FIELD_3IM, FIELD_4RB, FIELD_4IM, FIELD_2RD, FIELD_2RM
USE FIELD_FACTORY_MODULE, ONLY : FIELD_NEW, FIELD_DELETE
IMPLICIT NONE

Expand Down Expand Up @@ -121,6 +121,19 @@ MODULE YOWFIELD_MOD
REAL(KIND=JWRO), DIMENSION(:), POINTER :: NEMOVSTOKES=>NULL()
REAL(KIND=JWRO), DIMENSION(:), POINTER :: NEMOSTRN=>NULL()
REAL(KIND=JWRO), DIMENSION(:), POINTER :: NEMOWSWAVE=>NULL()
#ifdef PARKIND1_SINGLE_NEMO
CLASS(FIELD_2RM), POINTER :: F_NSWH=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NMWP=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NPHIEPS=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NEMOPHIF=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NTAUOC=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NEMOTAUX=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NEMOTAUY=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NEMOUSTOKES=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NEMOVSTOKES=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NEMOSTRN=>NULL()
CLASS(FIELD_2RM), POINTER :: F_NEMOWSWAVE=>NULL()
#else
CLASS(FIELD_2RD), POINTER :: F_NSWH=>NULL()
CLASS(FIELD_2RD), POINTER :: F_NMWP=>NULL()
CLASS(FIELD_2RD), POINTER :: F_NPHIEPS=>NULL()
Expand All @@ -132,6 +145,7 @@ MODULE YOWFIELD_MOD
CLASS(FIELD_2RD), POINTER :: F_NEMOVSTOKES=>NULL()
CLASS(FIELD_2RD), POINTER :: F_NEMOSTRN=>NULL()
CLASS(FIELD_2RD), POINTER :: F_NEMOWSWAVE=>NULL()
#endif
CONTAINS
PROCEDURE :: INIT => WAVE2OCEAN_FIELD_INIT
PROCEDURE :: UPDATE_VIEW => WAVE2OCEAN_UPDATE_VIEW
Expand Down Expand Up @@ -319,7 +333,7 @@ SUBROUTINE ENVIRONMENT_FINAL(SELF)
ENDIF
END SUBROUTINE ENVIRONMENT_FINAL

SUBROUTINE FORCING_FIELDS_FIELD_INIT(SELF, UWND, VWND, AIRD, WSTAR, CICOVER, CITHICK, LKFR, USTRA, VSTRA, UCUR, VCUR, &
SUBROUTINE FORCING_FIELDS_FIELD_INIT(SELF, UWND, VWND, AIRD, WSTAR, CICOVER, CITHICK, LKFR, USTRA, VSTRA, UCUR, VCUR,&
& WSWAVE, WDWAVE, UFRIC, TAUW, TAUWDIR, Z0M, Z0B, CHRNCK, XLON, YLAT)
CLASS(FORCING_FIELDS_FIELD), INTENT(INOUT) :: SELF
REAL(KIND=JWRB), DIMENSION(:,:), INTENT(IN), OPTIONAL :: UWND
Expand Down
12 changes: 6 additions & 6 deletions src/ecwam/yowfield_mod.fypp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
MODULE YOWFIELD_MOD

USE PARKIND_WAVE, ONLY : JWRB, JWIM, JWRO
USE FIELD_MODULE, ONLY : FIELD_3RB, FIELD_2IM, FIELD_2RB, FIELD_3IM, FIELD_4RB, FIELD_4IM, FIELD_2RD
USE FIELD_MODULE, ONLY : FIELD_3RB, FIELD_2IM, FIELD_2RB, FIELD_3IM, FIELD_4RB, FIELD_4IM, FIELD_2RD, FIELD_2RM
USE FIELD_FACTORY_MODULE, ONLY : FIELD_NEW, FIELD_DELETE
IMPLICIT NONE

Expand All @@ -25,15 +25,15 @@ MODULE YOWFIELD_MOD
#:for var, type, dim in objdef[obj]
#{if type == 'real'}#REAL(KIND=JWRB)#{elif type == 'ocean'}#REAL(KIND=JWRO)#{else}#INTEGER(KIND=JWIM)#{endif}#, DIMENSION(${','.join(':' for _ in range(dim-1))}$), POINTER :: ${var.upper()}$=>NULL()
#:endfor
#:if MIXED_PRECISION == 1
#ifdef PARKIND1_SINGLE_NEMO
#:for var, type, dim in objdef[obj]
CLASS(FIELD_${dim}$#{if type == 'int'}#IM#{elif type == 'ocean'}#RD#{else}#RB#{endif}#), POINTER :: F_${var.upper()}$=>NULL()
CLASS(FIELD_${dim}$#{if type == 'int'}#IM#{elif type == 'ocean'}#RM#{else}#RB#{endif}#), POINTER :: F_${var.upper()}$=>NULL()
#:endfor
#:else
#else
#:for var, type, dim in objdef[obj]
CLASS(FIELD_${dim}$#{if type == 'int'}#IM#{else}#RB#{endif}#), POINTER :: F_${var.upper()}$=>NULL()
CLASS(FIELD_${dim}$#{if type == 'int'}#IM#{elif type == 'ocean'}#RD#{else}#RB#{endif}#), POINTER :: F_${var.upper()}$=>NULL()
#:endfor
#:endif
#endif
CONTAINS
PROCEDURE :: INIT => ${obj.upper()}$_FIELD_INIT
PROCEDURE :: UPDATE_VIEW => ${obj.upper()}$_UPDATE_VIEW
Expand Down

0 comments on commit 74eb7bc

Please sign in to comment.