From 7827cd1f4e68ac5afe19b68d213468f59eae888c Mon Sep 17 00:00:00 2001 From: sanderh Date: Tue, 20 Dec 2022 15:05:28 +0100 Subject: [PATCH 1/4] :bug: crash when STAB3 air-sea temperature provided With newer Intel compilers, when air-sea temperature differences are provided for STAB3, a cold start crashes WAVEWATCH as the action density can be NaN. The NaN propagates into the computation of an index in the SIN4 3D lookup table. --- model/src/w3src4md.F90 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/model/src/w3src4md.F90 b/model/src/w3src4md.F90 index a8698d1d21..58d5f91dd7 100644 --- a/model/src/w3src4md.F90 +++ b/model/src/w3src4md.F90 @@ -815,8 +815,11 @@ SUBROUTINE W3SIN4 (A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, & TEMP=0. DO ITH=1,NTH IS=ITH+(NK-1)*NTH - COSWIND=(ECOS(IS)*COSU+ESIN(IS)*SINU) - TEMP=TEMP+A(IS)*(MAX(COSWIND,0.))**3 + IF ( A(IS).EQ.A(IS) ) THEN + ! action density is not NaN. Can be NaN on cold start + COSWIND=(ECOS(IS)*COSU+ESIN(IS)*SINU) + TEMP=TEMP+A(IS)*(MAX(COSWIND,0.))**3 + END IF END DO TAUPX=TAUX-ABS(TTAUWSHELTER)*XSTRESS From 6b03d2c440bb853a78866af923ea3bdcb96b9159 Mon Sep 17 00:00:00 2001 From: sanderh Date: Thu, 29 Dec 2022 20:47:35 +0100 Subject: [PATCH 2/4] :recycle: cause is a NaN air-sea temperature difference from nearest land point --- model/src/w3src4md.F90 | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/model/src/w3src4md.F90 b/model/src/w3src4md.F90 index 58d5f91dd7..1510afb5c1 100644 --- a/model/src/w3src4md.F90 +++ b/model/src/w3src4md.F90 @@ -666,7 +666,12 @@ SUBROUTINE W3SIN4 (A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, & ! I got it from, maybe just made up from drag law ... ! #ifdef W3_STAB3 - Usigma=MAX(0.,-0.025*AS) + IF ( ISNAN(AS) ) THEN + ! AS is typically NaN on land and can propagate into the domain by interpolation + Usigma = 0. + ELSE + Usigma = MAX(0.,-0.025*AS) + END IF USTARsigma=(1.0+U/(10.+U))*Usigma #endif UST=USTAR @@ -815,11 +820,8 @@ SUBROUTINE W3SIN4 (A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, & TEMP=0. DO ITH=1,NTH IS=ITH+(NK-1)*NTH - IF ( A(IS).EQ.A(IS) ) THEN - ! action density is not NaN. Can be NaN on cold start - COSWIND=(ECOS(IS)*COSU+ESIN(IS)*SINU) - TEMP=TEMP+A(IS)*(MAX(COSWIND,0.))**3 - END IF + COSWIND=(ECOS(IS)*COSU+ESIN(IS)*SINU) + TEMP=TEMP+A(IS)*(MAX(COSWIND,0.))**3 END DO TAUPX=TAUX-ABS(TTAUWSHELTER)*XSTRESS From 5aa52b22a72a2f803b88a1784b9bf16a8f07c53f Mon Sep 17 00:00:00 2001 From: sanderh Date: Thu, 29 Dec 2022 20:56:40 +0100 Subject: [PATCH 3/4] :mag: add more W3SIN4 general debug information output --- model/src/w3src4md.F90 | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/model/src/w3src4md.F90 b/model/src/w3src4md.F90 index 1510afb5c1..e2bf12c9a1 100644 --- a/model/src/w3src4md.F90 +++ b/model/src/w3src4md.F90 @@ -673,6 +673,9 @@ SUBROUTINE W3SIN4 (A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, & Usigma = MAX(0.,-0.025*AS) END IF USTARsigma=(1.0+U/(10.+U))*Usigma +#endif +#ifdef W3_T + WRITE (NDST,9003) AS, Usigma, USTARsigma, U #endif UST=USTAR ISTAB=3 @@ -683,6 +686,9 @@ SUBROUTINE W3SIN4 (A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, & #endif TAUX = UST**2* COS(USDIR) TAUY = UST**2* SIN(USDIR) +#ifdef W3_T + WRITE (NDST,9001) ISTAB, TAUX, TAUY, UST +#endif ! ! Loop over the resolved part of the spectrum ! @@ -793,6 +799,9 @@ SUBROUTINE W3SIN4 (A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, & YSTRESS=0.5*(STRESSSTAB(1,2)+STRESSSTAB(2,2)) TAUWNX=0.5*(STRESSSTABN(1,1)+STRESSSTABN(2,1)) TAUWNY=0.5*(STRESSSTABN(1,2)+STRESSSTABN(2,2)) +#endif +#ifdef W3_T + WRITE (NDST,9002) SUM(D), SUM(A), XSTRESS, YSTRESS, TAUWNX, TAUWNY #endif S = D * A ! @@ -873,6 +882,21 @@ SUBROUTINE W3SIN4 (A, CG, K, U, USTAR, DRAT, AS, USDIR, Z0, CD, & ! #ifdef W3_T 9000 FORMAT (' TEST W3SIN4 : COMMON FACT.: ',3E10.3) +9001 FORMAT (' TEST W3SIN4 : ISTAB :',I2/ & + ' TAUX :',E12.3/ & + ' TAUY :',E12.3/ & + ' UST :',E12.3) +9002 FORMAT (' TEST W3SIN4 : SUM(D) :',E12.3/ & + ' SUM(A) :',E12.3/ & + ' STRESSX :',E12.3/ & + ' STRESSY :',E12.3/ & + ' TAUWNX :',E12.3/ & + ' TAUWNY :',E12.3) +9003 FORMAT (' TEST W3SIN4 : AS :',F8.4/ & + ' Usigma :',E12.3/ & + ' USTARsigma :',E12.3/ & + ' U :',E12.3) + #endif !/ !/ End of W3SIN4 ----------------------------------------------------- / From c47487fcbae61359356fa9dc75319f7e827f8019 Mon Sep 17 00:00:00 2001 From: sanderh Date: Thu, 29 Dec 2022 21:08:25 +0100 Subject: [PATCH 4/4] :star: negative air-sea temperature difference is valid too --- model/src/w3ounfmetamd.F90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/model/src/w3ounfmetamd.F90 b/model/src/w3ounfmetamd.F90 index fd00c7bb37..44704c375e 100644 --- a/model/src/w3ounfmetamd.F90 +++ b/model/src/w3ounfmetamd.F90 @@ -2638,8 +2638,8 @@ SUBROUTINE DEFAULT_META() !META(1)%VARNS='air_sea_temperature_difference' META(1)%VARNS='' META(1)%VARNG='air_sea_temperature_difference' - META(1)%VMIN = 0 - META(1)%VMAX = 400 + META(1)%VMIN = -200.0 + META(1)%VMAX = 200.0 ! IFI=1, IFJ=5, WLV META => GROUP(1)%FIELD(5)%META META(1)%FSC = 0.01