Skip to content

Commit

Permalink
Merge pull request #13 from ecmwf-ifs/naan-temp-array-reductions
Browse files Browse the repository at this point in the history
Temporary array reductions
  • Loading branch information
wdeconinck authored Mar 27, 2024
2 parents 48aabec + 9085bd3 commit dd11e32
Show file tree
Hide file tree
Showing 41 changed files with 564 additions and 507 deletions.
1 change: 1 addition & 0 deletions package/bundle/bundle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ name : ecwam-bundle
version : 0.0.0
cmake : CMAKE_LINK_DEPENDS_NO_SHARED=ON
ENABLE_OMP=ON
ENABLE_SINGLE_PRECISION=OFF


projects :
Expand Down
6 changes: 4 additions & 2 deletions share/ecwam/scripts/ecwam_run_model.sh
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@ wamnang=$(read_config directions)
wamnfre=$(read_config frequencies)

nproma=$(read_config nproma --default=24)
iphys=$(read_config iphys --default=1)
llgcbz0=$(read_config llgcbz0 --default=F)

# read timesteps
phys_tstp=$(read_config physics.timestep --format=seconds --default=900)
Expand Down Expand Up @@ -216,12 +218,12 @@ cat > wam_namelist << EOF
IREST = 1,
LFDBIOOUT = F,
LFDB = F,
IPHYS = 1,
IPHYS = ${iphys},
ISHALLO = 0,
ISNONLIN = 0,
LBIWBK = T,
LLCAPCHNK = T,
LLGCBZ0 = F,
LLGCBZ0 = ${llgcbz0},
LLNORMAGAM = F,
IPROPAGS = 2,
LSUBGRID = F,
Expand Down
6 changes: 3 additions & 3 deletions src/ecwam/airsea.F90
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ SUBROUTINE AIRSEA (KIJS, KIJL, &
#include "z0wave.intfb.h"

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL, ICODE_WND, IUSFG
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT (IN) :: HALP, U10DIR, TAUW, TAUWDIR, RNFAC
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT (INOUT) :: U10, US
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT (OUT) :: Z0, Z0B, CHRNCK
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT (IN) :: HALP, U10DIR, TAUW, TAUWDIR, RNFAC
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT (INOUT) :: U10, US
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT (OUT) :: Z0, Z0B, CHRNCK

INTEGER(KIND=JWIM) :: IJ, I, J

Expand Down
12 changes: 6 additions & 6 deletions src/ecwam/cimsstrn.F90
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,16 @@ SUBROUTINE CIMSSTRN(KIJS, KIJL, FL1, WAVNUM, DEPTH, CITHICK, STRN)
#include "aki_ice.intfb.h"

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NFRE), INTENT(IN) :: WAVNUM
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT(IN) :: DEPTH
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT(IN) :: CITHICK
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT(OUT) :: STRN
REAL(KIND=JWRB), DIMENSION(KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB), DIMENSION(KIJL,NFRE), INTENT(IN) :: WAVNUM
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT(IN) :: DEPTH
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT(IN) :: CITHICK
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT(OUT) :: STRN


INTEGER(KIND=JWIM) :: IJ, M, K
REAL(KIND=JWRB) :: F1LIM
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL) :: XKI, E, SUME
REAL(KIND=JWRB), DIMENSION(KIJL) :: XKI, E, SUME
REAL(KIND=JPHOOK) :: ZHOOK_HANDLE

! ----------------------------------------------------------------------
Expand Down
14 changes: 7 additions & 7 deletions src/ecwam/ciwabr.F90
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,16 @@ SUBROUTINE CIWABR (KIJS, KIJL, CICOVER, FL1, WAVNUM, CGROUP, CIWAB)
IMPLICIT NONE

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL), INTENT(IN) :: CICOVER
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL,NFRE), INTENT(IN) :: WAVNUM, CGROUP
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL,NANG,NFRE), INTENT(OUT) :: CIWAB
REAL(KIND=JWRB),DIMENSION(KIJL), INTENT(IN) :: CICOVER
REAL(KIND=JWRB),DIMENSION(KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB),DIMENSION(KIJL,NFRE), INTENT(IN) :: WAVNUM, CGROUP
REAL(KIND=JWRB),DIMENSION(KIJL,NANG,NFRE), INTENT(OUT) :: CIWAB


INTEGER(KIND=JWIM) :: K, M, IJ
REAL(KIND=JWRB) :: EWH
REAL(KIND=JWRB) :: X, ALP
REAL(KIND=JWRB),DIMENSION(NFRE) :: XK2
REAL(KIND=JWRB) :: XK2
REAL(KIND=JPHOOK) :: ZHOOK_HANDLE

! ----------------------------------------------------------------------
Expand All @@ -91,8 +91,8 @@ SUBROUTINE CIWABR (KIJS, KIJL, CICOVER, FL1, WAVNUM, CGROUP, CIWAB)
DO K=1,NANG
DO IJ=KIJS,KIJL
EWH=4.0_JWRB*SQRT(MAX(EPSMIN,FL1(IJ,K,M)*DFIM(M)))
XK2(M)=WAVNUM(IJ,M)**2
ALP=CDICWA*XK2(M)*EWH
XK2=WAVNUM(IJ,M)**2
ALP=CDICWA*XK2*EWH
X=ALP*CGROUP(IJ,M)*IDELT
CIWAB(IJ,K,M)=1.0_JWRB-CICOVER(IJ)*(1.0_JWRB-EXP(-MIN(X,50.0_JWRB)))
ENDDO
Expand Down
6 changes: 3 additions & 3 deletions src/ecwam/femean.F90
Original file line number Diff line number Diff line change
Expand Up @@ -63,16 +63,16 @@ SUBROUTINE FEMEAN (KIJS, KIJL, F, EM, FM)

IMPLICIT NONE

REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG,NFRE), INTENT(IN) :: F
REAL(KIND=JWRB), DIMENSION(KIJL,NANG,NFRE), INTENT(IN) :: F

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT(OUT) :: EM, FM
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT(OUT) :: EM, FM


INTEGER(KIND=JWIM) :: IJ, M, K
REAL(KIND=JWRB) :: DELT25, DELT2, DEL2
REAL(KIND=JPHOOK) :: ZHOOK_HANDLE
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL) :: TEMP2
REAL(KIND=JWRB),DIMENSION(KIJL) :: TEMP2

! ----------------------------------------------------------------------

Expand Down
23 changes: 15 additions & 8 deletions src/ecwam/femeanws.F90
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
! nor does it submit to any jurisdiction.
!

SUBROUTINE FEMEANWS (KIJS, KIJL, FL1, XLLWS, EM, FM)
SUBROUTINE FEMEANWS (KIJS, KIJL, FL1, XLLWS, FM, EM)

! ----------------------------------------------------------------------

Expand Down Expand Up @@ -63,15 +63,16 @@ SUBROUTINE FEMEANWS (KIJS, KIJL, FL1, XLLWS, EM, FM)
IMPLICIT NONE

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL
REAL(KIND=JWRB), DIMENSION(kIJS:KIJL,NANG,NFRE), INTENT(IN) :: FL1, XLLWS
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT(OUT) :: EM, FM
REAL(KIND=JWRB), DIMENSION(KIJL,NANG,NFRE), INTENT(IN) :: FL1, XLLWS
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT(OUT) :: FM
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT(OUT), OPTIONAL :: EM


INTEGER(KIND=JWIM) :: IJ, M, K

REAL(KIND=JWRB) :: DELT25, DELT2
REAL(KIND=JPHOOK) :: ZHOOK_HANDLE
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL) :: TEMP2
REAL(KIND=JWRB), DIMENSION(KIJL) :: TEMP2, EM_LOC

! ----------------------------------------------------------------------

Expand All @@ -81,7 +82,7 @@ SUBROUTINE FEMEANWS (KIJS, KIJL, FL1, XLLWS, EM, FM)
! ------------------------------------------------

DO IJ=KIJS,KIJL
EM(IJ) = EPSMIN
EM_LOC(IJ) = EPSMIN
FM(IJ) = EPSMIN
ENDDO

Expand All @@ -100,7 +101,7 @@ SUBROUTINE FEMEANWS (KIJS, KIJL, FL1, XLLWS, EM, FM)
ENDDO
ENDDO
DO IJ=KIJS,KIJL
EM(IJ) = EM(IJ)+DFIM(M)*TEMP2(IJ)
EM_LOC(IJ) = EM_LOC(IJ)+DFIM(M)*TEMP2(IJ)
FM(IJ) = FM(IJ)+DFIMOFR(M)*TEMP2(IJ)
ENDDO
ENDDO
Expand All @@ -110,11 +111,17 @@ SUBROUTINE FEMEANWS (KIJS, KIJL, FL1, XLLWS, EM, FM)
! ------------------------------------------

DO IJ=KIJS,KIJL
EM(IJ) = EM(IJ)+DELT25*TEMP2(IJ)
EM_LOC(IJ) = EM_LOC(IJ)+DELT25*TEMP2(IJ)
FM(IJ) = FM(IJ)+DELT2*TEMP2(IJ)
FM(IJ) = EM(IJ)/FM(IJ)
FM(IJ) = EM_LOC(IJ)/FM(IJ)
ENDDO

IF(PRESENT(EM))THEN
DO IJ=KIJS,KIJL
EM(IJ) = EM_LOC(IJ)
ENDDO
ENDIF

IF (LHOOK) CALL DR_HOOK('FEMEANWS',1,ZHOOK_HANDLE)

END SUBROUTINE FEMEANWS
8 changes: 4 additions & 4 deletions src/ecwam/fkmean.F90
Original file line number Diff line number Diff line change
Expand Up @@ -72,16 +72,16 @@ SUBROUTINE FKMEAN (KIJS, KIJL, FL1, WAVNUM, &

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL

REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NFRE), INTENT(IN) :: WAVNUM
REAL(KIND=JWRB), DIMENSION(KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB), DIMENSION(KIJL,NFRE), INTENT(IN) :: WAVNUM

REAL(KIND=JWRB),DIMENSION(KIJS:KIJL), INTENT(OUT) :: EM, FM1, F1, AK, XK
REAL(KIND=JWRB),DIMENSION(KIJL), INTENT(OUT) :: EM, FM1, F1, AK, XK


INTEGER(KIND=JWIM) :: IJ, M, K
REAL(KIND=JPHOOK) :: ZHOOK_HANDLE
REAL(KIND=JWRB) :: DELT25, COEFM1, COEF1, COEFA, COEFX, SQRTK
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL) :: TEMPA, TEMPX, TEMP2
REAL(KIND=JWRB),DIMENSION(KIJL) :: TEMPA, TEMPX, TEMP2

! ----------------------------------------------------------------------

Expand Down
6 changes: 3 additions & 3 deletions src/ecwam/frcutindex.F90
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ SUBROUTINE FRCUTINDEX (KIJS, KIJL, FM, FMWS, UFRIC, CICOVER, &
IMPLICIT NONE

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL
INTEGER(KIND=JWIM), INTENT(OUT) :: MIJ(KIJS:KIJL)
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL), INTENT(IN) :: FM, FMWS, UFRIC, CICOVER
REAL(KIND=JWRB),DIMENSION(KIJS:KIJL,NFRE), INTENT(OUT) :: RHOWGDFTH
INTEGER(KIND=JWIM), INTENT(OUT) :: MIJ(KIJL)
REAL(KIND=JWRB),DIMENSION(KIJL), INTENT(IN) :: FM, FMWS, UFRIC, CICOVER
REAL(KIND=JWRB),DIMENSION(KIJL,NFRE), INTENT(OUT) :: RHOWGDFTH


INTEGER(KIND=JWIM) :: IJ, M
Expand Down
16 changes: 8 additions & 8 deletions src/ecwam/halphap.F90
Original file line number Diff line number Diff line change
Expand Up @@ -47,19 +47,19 @@ SUBROUTINE HALPHAP(KIJS, KIJL, WAVNUM, COSWDIF, FL1, HALP)
#include "meansqs_lf.intfb.h"

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NFRE), INTENT(IN) :: WAVNUM
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG), INTENT(IN) :: COSWDIF
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL), INTENT(OUT) :: HALP
REAL(KIND=JWRB), DIMENSION(KIJL,NFRE), INTENT(IN) :: WAVNUM
REAL(KIND=JWRB), DIMENSION(KIJL,NANG), INTENT(IN) :: COSWDIF
REAL(KIND=JWRB), DIMENSION(KIJL,NANG,NFRE), INTENT(IN) :: FL1
REAL(KIND=JWRB), DIMENSION(KIJL), INTENT(OUT) :: HALP

INTEGER(KIND=JWIM) :: IJ, K, M

REAL(KIND=JWRB) :: ZLNFRNFRE
REAL(KIND=JPHOOK) :: ZHOOK_HANDLE
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL) :: ALPHAP
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL) :: XMSS, EM, FM, F1D
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG) :: WD
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG,NFRE) :: FLWD
REAL(KIND=JWRB), DIMENSION(KIJL) :: ALPHAP
REAL(KIND=JWRB), DIMENSION(KIJL) :: XMSS, EM, FM, F1D
REAL(KIND=JWRB), DIMENSION(KIJL,NANG) :: WD
REAL(KIND=JWRB), DIMENSION(KIJL,NANG,NFRE) :: FLWD

! ----------------------------------------------------------------------

Expand Down
29 changes: 11 additions & 18 deletions src/ecwam/imphftail.F90
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,17 @@ SUBROUTINE IMPHFTAIL (KIJS, KIJL, MIJ, FLM, WAVNUM, XK2CG, FL1)
IMPLICIT NONE

INTEGER(KIND=JWIM), INTENT(IN) :: KIJS, KIJL
INTEGER(KIND=JWIM), DIMENSION(KIJS:KIJL), INTENT(IN) :: MIJ
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG), INTENT(IN) :: FLM
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NFRE), INTENT(IN) :: WAVNUM, XK2CG
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NANG,NFRE), INTENT(INOUT) :: FL1
INTEGER(KIND=JWIM), DIMENSION(KIJL), INTENT(IN) :: MIJ
REAL(KIND=JWRB), DIMENSION(KIJL,NANG), INTENT(IN) :: FLM
REAL(KIND=JWRB), DIMENSION(KIJL,NFRE), INTENT(IN) :: WAVNUM, XK2CG
REAL(KIND=JWRB), DIMENSION(KIJL,NANG,NFRE), INTENT(INOUT) :: FL1


INTEGER(KIND=JWIM) :: IJ, K, M

REAL(KIND=JWRB) :: AKM1, TFAC
REAL(KIND=JPHOOK) :: ZHOOK_HANDLE
REAL(KIND=JWRB), DIMENSION(KIJS:KIJL,NFRE) :: TEMP2
REAL(KIND=JWRB), DIMENSION(KIJL) :: TEMP1, TEMP2

! ----------------------------------------------------------------------

Expand All @@ -71,24 +71,17 @@ SUBROUTINE IMPHFTAIL (KIJS, KIJL, MIJ, FLM, WAVNUM, XK2CG, FL1)
! ----------------

DO IJ=KIJS,KIJL
DO M=MIJ(IJ),NFRE
TEMP2(IJ,M) = 1.0_JWRB/XK2CG(IJ,M)/WAVNUM(IJ,M)
ENDDO
ENDDO
TEMP1(IJ) = 1.0_JWRB/XK2CG(IJ,MIJ(IJ))/WAVNUM(IJ,MIJ(IJ))

DO IJ=KIJS,KIJL
DO M=MIJ(IJ)+1,NFRE
TEMP2(IJ,M) = TEMP2(IJ,M)/TEMP2(IJ,MIJ(IJ))
ENDDO
ENDDO
TEMP2(IJ) = 1.0_JWRB/XK2CG(IJ,M)/WAVNUM(IJ,M)
TEMP2(IJ) = TEMP2(IJ)/TEMP1(IJ)

!* MERGE TAIL INTO SPECTRA.
! ------------------------
DO K=1,NANG
DO IJ=KIJS,KIJL
TFAC = FL1(IJ,K,MIJ(IJ))
DO M=MIJ(IJ)+1,NFRE
FL1(IJ,K,M) = MAX(TEMP2(IJ,M)*TFAC,FLM(IJ,K))
DO K=1,NANG
TFAC = FL1(IJ,K,MIJ(IJ))
FL1(IJ,K,M) = MAX(TEMP2(IJ)*TFAC,FLM(IJ,K))
ENDDO
ENDDO
ENDDO
Expand Down
Loading

0 comments on commit dd11e32

Please sign in to comment.