Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions model/bin/switch_E3SM_wavice
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
F90 NOGRB NC4 DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT1 DB1 MLIM TR0 BS0 IC4 IS0 REF0 XX0 WNT1 WNX1 CRT1 CRX1 O0 O1 O2 O3 O4 O5 O6 O7 SCRIPNC SCRIP RTD RWND UOST
37 changes: 34 additions & 3 deletions model/src/w3adatmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ MODULE W3ADATMD
! WNMEAN R.A. Public Mean wave number
!
! CHARN R.A. Public Charnock parameter for air-sea friction.
! Z0 R.A. Public Sfc Roughness Length for E3SM Coupling
! USTAR2 R.A. Public Friction Velocity for E3SM coupling
! TWS R.A. Public Wind sea period (used for flux parameterizations)
! CGE R.A. Public Energy flux.
! PHIAW R.A. Public Wind to wave energy flux.
Expand Down Expand Up @@ -417,10 +419,12 @@ MODULE W3ADATMD
!
! Output fields group 5)
!
REAL, POINTER :: CHARN(:), CGE(:), PHIAW(:), &
REAL, POINTER :: CHARN(:), Z0(:), USTAR2(:), &
CGE(:), PHIAW(:), &
TAUWIX(:), TAUWIY(:), TAUWNX(:), &
TAUWNY(:), WHITECAP(:,:), TWS(:)
REAL, POINTER :: XCHARN(:), XCGE(:), XPHIAW(:), &
REAL, POINTER :: XCHARN(:), XZ0(:) , XUSTAR2(:), &
XCGE(:), XPHIAW(:), &
XTAUWIX(:), XTAUWIY(:), XTAUWNX(:), &
XTAUWNY(:), XWHITECAP(:,:), XTWS(:)
!
Expand Down Expand Up @@ -576,7 +580,8 @@ MODULE W3ADATMD
PTHP0(:,:), PQP(:,:), PPE(:,:), &
PTM1(:,:), PT1(:,:), PT2(:,:),PEP(:,:)
!
REAL, POINTER :: CHARN(:), CGE(:), PHIAW(:), &
REAL, POINTER :: CHARN(:), Z0(:), USTAR2(:), &
CGE(:), PHIAW(:), &
TAUWIX(:), TAUWIY(:), TAUWNX(:), &
TAUWNY(:), WHITECAP(:,:), TWS(:)
!
Expand Down Expand Up @@ -1155,6 +1160,8 @@ SUBROUTINE W3DIMA ( IMOD, NDSE, NDST, D_ONLY )
! Friction velocity UST and USTDIR in W3WDATMD
!
ALLOCATE ( WADATS(IMOD)%CHARN (NSEALM), &
WADATS(IMOD)%Z0 (NSEALM), &
WADATS(IMOD)%USTAR2 (NSEALM), &
WADATS(IMOD)%TWS (NSEALM), &
WADATS(IMOD)%CGE (NSEALM), &
WADATS(IMOD)%PHIAW (NSEALM), &
Expand All @@ -1167,6 +1174,8 @@ SUBROUTINE W3DIMA ( IMOD, NDSE, NDST, D_ONLY )
CHECK_ALLOC_STATUS ( ISTAT )
!
WADATS(IMOD)%CHARN = UNDEF
WADATS(IMOD)%Z0 = UNDEF
WADATS(IMOD)%USTAR2 = UNDEF
WADATS(IMOD)%TWS = UNDEF
WADATS(IMOD)%CGE = UNDEF
WADATS(IMOD)%PHIAW = UNDEF
Expand Down Expand Up @@ -2058,8 +2067,26 @@ SUBROUTINE W3XDMA ( IMOD, NDSE, NDST, OUTFLAGS )
ALLOCATE ( WADATS(IMOD)%XTWS(1), STAT=ISTAT )
CHECK_ALLOC_STATUS ( ISTAT )
END IF

IF ( OUTFLAGS( 5, 12) ) THEN
ALLOCATE ( WADATS(IMOD)%XZ0(NXXX), STAT=ISTAT )
CHECK_ALLOC_STATUS ( ISTAT )
ELSE
ALLOCATE ( WADATS(IMOD)%XZ0(1), STAT=ISTAT )
CHECK_ALLOC_STATUS ( ISTAT )
END IF

IF ( OUTFLAGS( 5, 13) ) THEN
ALLOCATE ( WADATS(IMOD)%XUSTAR2(NXXX), STAT=ISTAT )
CHECK_ALLOC_STATUS ( ISTAT )
ELSE
ALLOCATE ( WADATS(IMOD)%XUSTAR2(1), STAT=ISTAT )
CHECK_ALLOC_STATUS ( ISTAT )
END IF
!
WADATS(IMOD)%XCHARN = UNDEF
WADATS(IMOD)%XZ0 = UNDEF
WADATS(IMOD)%XUSTAR2 = UNDEF
WADATS(IMOD)%XTWS = UNDEF
WADATS(IMOD)%XCGE = UNDEF
WADATS(IMOD)%XPHIAW = UNDEF
Expand Down Expand Up @@ -2890,6 +2917,8 @@ SUBROUTINE W3SETA ( IMOD, NDSE, NDST )
PEP => WADATS(IMOD)%PEP
!
CHARN => WADATS(IMOD)%CHARN
Z0 => WADATS(IMOD)%Z0
USTAR2 => WADATS(IMOD)%USTAR2
TWS => WADATS(IMOD)%TWS
CGE => WADATS(IMOD)%CGE
PHIAW => WADATS(IMOD)%PHIAW
Expand Down Expand Up @@ -3228,6 +3257,8 @@ SUBROUTINE W3XETA ( IMOD, NDSE, NDST )
PEP => WADATS(IMOD)%XPEP
!
CHARN => WADATS(IMOD)%XCHARN
Z0 => WADATS(IMOD)%XZ0
USTAR2 => WADATS(IMOD)%XUSTAR2
TWS => WADATS(IMOD)%XTWS
CGE => WADATS(IMOD)%XCGE
PHIAW => WADATS(IMOD)%XPHIAW
Expand Down
6 changes: 5 additions & 1 deletion model/src/w3fld1md.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1134,7 +1134,11 @@ SUBROUTINE APPENDTAIL(INSPC, WN2, NKT, KA1, KA2, KA3, WNDDIR,SAT)
ENDDO
AVG=SUM(NORMSPC)/MAX(REAL(NTH),1.)
DO T=1, NTH
INSPC(K,T) = SAT * NORMSPC(T)/TPI/(WN2(K)**3.0)/AVG
IF (AVG /= 0.0) THEN
INSPC(K,T)=BT(K)*INSPC(K,T)/TPI/(WN2(K)**3.0)/AVG
ELSE
INSPC(K,T)=0.0
ENDIF
ENDDO
ENDDO
DO T=1, NTH
Expand Down
5 changes: 4 additions & 1 deletion model/src/w3gdatmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -680,6 +680,7 @@ MODULE W3GDATMD

LOGICAL :: GINIT, FLDRY, FLCX, FLCY, FLCTH, FLCK, FLSOU, IICEDISP,&
IICESMOOTH
LOGICAL :: IC_NUMERICS
LOGICAL :: FLAGLL
LOGICAL :: CMPRTRCK
LOGICAL, POINTER :: FLAGST(:)
Expand Down Expand Up @@ -1182,6 +1183,7 @@ MODULE W3GDATMD

LOGICAL, POINTER :: GINIT, FLDRY, FLCX, FLCY, FLCTH, FLCK, FLSOU, IICEDISP,&
IICESMOOTH
LOGICAL, POINTER :: IC_NUMERICS
LOGICAL, POINTER :: FLAGLL
LOGICAL, POINTER :: CMPRTRCK
LOGICAL, POINTER :: FLAGST(:)
Expand Down Expand Up @@ -2359,7 +2361,8 @@ SUBROUTINE W3SETG ( IMOD, NDSE, NDST )
FLSOU => GRIDS(IMOD)%FLSOU
IICEDISP => GRIDS(IMOD)%IICEDISP
IICESMOOTH => GRIDS(IMOD)%IICESMOOTH
!
IC_NUMERICS => GRIDS(IMOD)%IC_NUMERICS
!
GNAME => GRIDS(IMOD)%GNAME
FILEXT => GRIDS(IMOD)%FILEXT
TRIGP => GRIDS(IMOD)%TRIGP
Expand Down
9 changes: 6 additions & 3 deletions model/src/w3gridmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -808,6 +808,7 @@ MODULE W3GRIDMD
!
REAL(8) :: GSHIFT ! see notes in WMGHGH
LOGICAL :: FLC, ICEDISP, TRCKCMPR
LOGICAL :: ICNUMERICS
INTEGER :: PTM ! Partitioning method
REAL :: PTFC ! Part. cut off freq (for method 5)
REAL :: AIRCMIN, AIRGB
Expand Down Expand Up @@ -1101,7 +1102,7 @@ MODULE W3GRIDMD
STDX, STDY, STDT, ICEHMIN, ICEHINIT, ICEDISP, &
ICESLN, ICEWIND, ICESNL, ICESDS, ICEHFAC, &
ICEHDISP, ICEDDISP, ICEFDISP, CALTYPE, &
TRCKCMPR, PTM, PTFC, BTBET
TRCKCMPR, PTM, PTFC, BTBET, ICNUMERICS
NAMELIST /OUTS/ P2SF, I1P2SF, I2P2SF, &
US3D, I1US3D, I2US3D, &
USSP, IUSSP, STK_WN, &
Expand Down Expand Up @@ -2744,6 +2745,7 @@ SUBROUTINE W3GRID(MDS)
STDY = -1.
STDT = -1.
ICEDISP = .FALSE.
ICNUMERICS=.FALSE.
CALTYPE = 'standard'
! Variables for 3D array output
E3D=0
Expand Down Expand Up @@ -3017,6 +3019,7 @@ SUBROUTINE W3GRID(MDS)
IICEHDISP = ICEHDISP
IICEDDISP = ICEDDISP
IICEFDISP = ICEFDISP
IC_NUMERICS=ICNUMERICS
PMOVE = MAX ( 0. , PMOVE )
PFMOVE = PMOVE
!
Expand Down Expand Up @@ -3404,7 +3407,7 @@ SUBROUTINE W3GRID(MDS)
ICEHINIT, ICEDISP, ICEHDISP, &
ICESLN, ICEWIND, ICESNL, ICESDS, &
ICEDDISP,ICEFDISP, CALTYPE, TRCKCMPR, &
BTBETA
BTBETA,ICNUMERICS
ELSE
WRITE (NDSO,2966) CICE0, CICEN, LICE, PMOVE, XSEED, FLAGTR, &
XP, XR, XFILT, IHMAX, HSPMIN, WSMULT, &
Expand All @@ -3414,7 +3417,7 @@ SUBROUTINE W3GRID(MDS)
ICEHINIT, ICEDISP, ICEHDISP, &
ICESLN, ICEWIND, ICESNL, ICESDS, &
ICEDDISP, ICEFDISP, CALTYPE, TRCKCMPR,&
BTBETA
BTBETA,ICNUMERICS
END IF
!
#ifdef W3_FLD1
Expand Down
16 changes: 14 additions & 2 deletions model/src/w3iogomd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -1209,7 +1209,7 @@ SUBROUTINE W3OUTG ( A, FLPART, FLOUTG, FLOUTG2 )
SYY, SXY, PHS, PTP, PLP, PDIR, PSI, PWS, &
PWST, PNR, USERO, TUSX, TUSY, PRMS, TPMS, &
USSX, USSY, MSSX, MSSY, MSSD, MSCX, MSCY, &
MSCD, CHARN, &
MSCD, CHARN, Z0, USTAR2, &
BHD, CGE, P2SMS, US3D, EF, TH1M, STH1M, &
TH2M, STH2M, HSIG, STMAXE, STMAXD, &
HCMAXE, HMAXE, HCMAXD, HMAXD, USSP, QP, PQP,&
Expand Down Expand Up @@ -2596,7 +2596,7 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD )
CFLXYMAX, CFLTHMAX, CFLKMAX, P2SMS, US3D, &
TH1M, STH1M, TH2M, STH2M, HSIG, PHICE, TAUICE,&
STMAXE, STMAXD, HMAXE, HCMAXE, HMAXD, HCMAXD,&
USSP, TAUOCX, TAUOCY
USSP, TAUOCX, TAUOCY, Z0, USTAR2
!/
USE W3ODATMD, ONLY: NOGRP, NGRPP, IDOUT, UNDEF, NDST, NDSE, &
FLOGRD, IPASS => IPASS1, WRITE => WRITE1, &
Expand Down Expand Up @@ -2915,6 +2915,8 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD )
IF ( FLOGRD( 5, 8) ) WHITECAP(ISEA,2) = UNDEF
IF ( FLOGRD( 5, 9) ) WHITECAP(ISEA,3) = UNDEF
IF ( FLOGRD( 5,10) ) WHITECAP(ISEA,4) = UNDEF
IF ( FLOGRD( 5,12) ) Z0(ISEA) = UNDEF
IF ( FLOGRD( 5,13) ) USTAR2(ISEA) = UNDEF
!
IF ( FLOGRD( 6, 1) ) THEN
SXX (ISEA) = UNDEF
Expand Down Expand Up @@ -3232,6 +3234,10 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD )
WRITE ( NDSOG ) WHITECAP(1:NSEA,4)
ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 11 ) THEN
WRITE ( NDSOG ) TWS(1:NSEA)
ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 12 ) THEN
WRITE ( NDSOG ) Z0(1:NSEA)
ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 13 ) THEN
WRITE ( NDSOG ) USTAR2(1:NSEA)
!
! Section 6)
!
Expand Down Expand Up @@ -3553,6 +3559,12 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD )
ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 11 ) THEN
READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) &
TWS(1:NSEA)
ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 12 ) THEN
READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) &
Z0(1:NSEA)
ELSE IF ( IFI .EQ. 5 .AND. IFJ .EQ. 13 ) THEN
READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) &
USTAR2(1:NSEA)
!
! Section 6)
!
Expand Down
4 changes: 2 additions & 2 deletions model/src/w3iogrmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -787,7 +787,7 @@ SUBROUTINE W3IOGR ( INXOUT, NDSM, IMOD, FEXT )
FLCK, FLSOU, FLBPI, FLBPO, CLATS, CLATIS, CTHG0S, &
STEXU, STEYU, STEDU, IICEHMIN, IICEHINIT, IICEDISP, &
ICESCALES(1:4), CALTYPE, CMPRTRCK, IICEHFAC, IICEHDISP,&
IICEDDISP, IICEFDISP, BTBETA, &
IICEDDISP, IICEFDISP, BTBETA, IC_NUMERICS, &
AAIRCMIN, AAIRGB

WRITE(NDSM)GRIDSHIFT
Expand Down Expand Up @@ -980,7 +980,7 @@ SUBROUTINE W3IOGR ( INXOUT, NDSM, IMOD, FEXT )
FLCTH, FLCK, FLSOU, FLBPI, FLBPO, CLATS, CLATIS, &
CTHG0S, STEXU, STEYU, STEDU, IICEHMIN, IICEHINIT, &
IICEDISP, ICESCALES(1:4), CALTYPE, CMPRTRCK, IICEHFAC, &
IICEDDISP, IICEHDISP, IICEFDISP, BTBETA, &
IICEDDISP, IICEHDISP, IICEFDISP, BTBETA, IC_NUMERICS, &
AAIRCMIN, AAIRGB
#ifdef W3_DEBUGIOGR
WRITE(740+IAPROC,*) 'W3IOGR, step 7.14'
Expand Down
4 changes: 3 additions & 1 deletion model/src/w3odatmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -846,7 +846,7 @@ SUBROUTINE W3NOUT ( NDSERR, NDSTST, NDSOUT)
!
! 5) Atmosphere-waves layer
!
NOGE(5) = 11
NOGE(5) = 13
!
IDOUT( 5, 1) = 'Friction velocity '
IDOUT( 5, 2) = 'Charnock parameter '
Expand All @@ -860,6 +860,8 @@ SUBROUTINE W3NOUT ( NDSERR, NDSTST, NDSOUT)
IDOUT( 5,10) = 'Dominant break prob '
IDOUT( 5,11) = 'Wind sea period' ! C.Bunney - reinstated this as is used in ww3_ounf
! Is it suposed to be defunct? It is not in ww3_outf...
IDOUT( 5, 12) = 'Sfc Rough. Length '
IDOUT( 5, 13) = 'Friction Velocity '
!
! 6) Wave-ocean layer
!
Expand Down
40 changes: 39 additions & 1 deletion model/src/w3sic4md.F90
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,8 @@ SUBROUTINE W3SIC4 (A, DEPTH, CG, IX, IY, S, D)
REAL, ALLOCATABLE :: ALPHA(:) ! exponential decay rate for energy
REAL, ALLOCATABLE :: MARG1(:), MARG2(:) ! Arguments for M2
REAL, ALLOCATABLE :: KARG1(:), KARG2(:), KARG3(:) !Arguments for M3

REAL :: x1,x2,x3,x1sqr,x2sqr,x3sqr !Arguments for M10
REAL :: perfour,amhb,bmhb !Arguments for M10
!/
!/ ------------------------------------------------------------------- /
!/
Expand Down Expand Up @@ -513,6 +514,43 @@ SUBROUTINE W3SIC4 (A, DEPTH, CG, IX, IY, S, D)
ALPHA(IK) = 0.2*(FREQ**2.13)*HICE
END DO
WN_I= 0.5 * ALPHA

CASE (8)
! Cubic fit to Meylan, Horvat & Bitz 2021
! ICECOEF1 is thickness
! ICECOEF5 is floe size
! TPI/SIG is period
x3=min(ICECOEF1,3.5) ! limit thickness to 3.5 m
x3=max(x3,0.1) ! limit thickness >0.1 m since I make fit below
x2=min(ICECOEF5*0.5,100.0) ! convert dia to radius, limit to 100m
x2=max(2.5,x2)
x2sqr=x2*x2
x3sqr=x3*x3
amhb = 2.12e-3
bmhb = 4.59e-2

DO IK=1, NK
x1=TPI/SIG(IK) ! period
x1sqr=x1*x1
KARG1(ik)=-0.26982 + 1.5043*x3 - 0.70112*x3sqr + 0.011037*x2 + &
(-0.0073178)*x2*x3 + 0.00036604*x2*x3sqr + &
(-0.00045789)*x2sqr + 1.8034e-05*x2sqr*x3 + &
(-0.7246)*x1 + 0.12068*x1*x3 + &
(-0.0051311)*x1*x3sqr + 0.0059241*x1*x2 + &
0.00010771*x1*x2*x3 - 1.0171e-05*x1*x2sqr + &
0.0035412*x1sqr - 0.0031893*x1sqr*x3 + &
(-0.00010791)*x1sqr*x2 + &
0.00031073*x1**3 + 1.5996e-06*x2**3 + 0.090994*x3**3
KARG1(IK)=min(KARG1(IK),0.0)
ALPHA(IK) = 10.0**KARG1(IK)
perfour=x1sqr*x1sqr
if ((x1.gt.5.0) .and. (x1.lt.20.0)) then
ALPHA(IK) = ALPHA(IK) + amhb/x1sqr+bmhb/perfour
else if (x1.gt.20.0) then
ALPHA(IK) = amhb/x1sqr+bmhb/perfour
endif
WN_I(IK) = ALPHA(IK) * 0.5
end do

CASE DEFAULT
WN_I = ICECOEF1 !Default to IC1: Uniform in k
Expand Down
10 changes: 7 additions & 3 deletions model/src/w3src4md.F90
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ SUBROUTINE W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, WNMEAN, &
TAUA, TAUADIR, DAIR, &
#endif
USTAR, USDIR, &
TAUWX, TAUWY, CD, Z0, CHARN, LLWS, FMEANWS, DLWMEAN)
TAUWX, TAUWY, CD, Z0, CHARN, USTAR2, &
LLWS, FMEANWS, DLWMEAN)
!/
!/ +-----------------------------------+
!/ | WAVEWATCH III SHOM |
Expand Down Expand Up @@ -136,6 +137,7 @@ SUBROUTINE W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, WNMEAN, &
! CD Real O Drag coefficient at wind level ZWND.
! Z0 Real O Corresponding z0.
! CHARN Real O Corresponding Charnock coefficient
! USTAR2 Real I/O Friction velocity for E3SM coupling
! LLWS L.A. I Wind sea true/false array for each component
! FMEANWS Real O Mean frequency of wind sea, used for tail
! DLWMEAN Real O Mean Long wave direction (L. Romero 2019)
Expand Down Expand Up @@ -196,9 +198,10 @@ SUBROUTINE W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, WNMEAN, &
#endif
REAL, INTENT(IN) :: TAUWX, TAUWY
LOGICAL, INTENT(IN) :: LLWS(NSPEC)
REAL, INTENT(INOUT) :: USTAR ,USDIR
REAL, INTENT(INOUT) :: USTAR, USDIR
REAL, INTENT(OUT) :: EMEAN, FMEAN, FMEAN1, WNMEAN, AMAX, &
CD, Z0, CHARN, FMEANWS, DLWMEAN
CD, Z0, CHARN, FMEANWS, DLWMEAN, &
USTAR2
!/
!/ ------------------------------------------------------------------- /
!/ Local parameters
Expand Down Expand Up @@ -306,6 +309,7 @@ SUBROUTINE W3SPR4 (A, CG, WN, EMEAN, FMEAN, FMEAN1, WNMEAN, &
CALL CALC_USTAR(U,TAUW,USTAR,Z0,CHARN)
UNZ = MAX ( 0.01 , U )
CD = (USTAR/UNZ)**2
USTAR2 = USTAR
USDIR = UDIR
#endif
!
Expand Down
Loading
Loading