Skip to content

Commit

Permalink
Addition of a new bottom friction parameterization BT5 for rocky bott…
Browse files Browse the repository at this point in the history
…om inspired from Madsen et al., 1988. By H. Michaud
  • Loading branch information
heloisemichaud committed Oct 8, 2024
1 parent b4e119e commit 1cfbe11
Show file tree
Hide file tree
Showing 19 changed files with 913 additions and 4 deletions.
3 changes: 2 additions & 1 deletion model/bin/build_utils.sh
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ check_switches()
#sort:s_bot:
s_bot ) TY='one'
ID='bottom friction'
OK='BT0 BT1 BT4 BT8 BT9' ;;
OK='BT0 BT1 BT4 BT5 BT8 BT9' ;;
#sort:s_db:
s_db ) TY='one'
ID='depth-induced breaking'
Expand Down Expand Up @@ -683,6 +683,7 @@ switch_files()
BT0) bt=$NULL ;;
BT1) bt='w3sbt1md' ;;
BT4) bt='w3sbt4md' ;;
BT5) bt='w3sbt5md' ;;
BT8) bt='w3sbt8md' ;;
BT9) bt='w3sbt9md' ;;
esac
Expand Down
1 change: 1 addition & 0 deletions model/bin/make_makefile.sh
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,7 @@
'W3SWLDMD' ) modtest=w3swldmd.o ;;
'W3SBT1MD' ) modtest=w3sbt1md.o ;;
'W3SBT4MD' ) modtest=w3sbt4md.o ;;
'W3SBT5MD' ) modtest=w3sbt5md.o ;;
'W3SBT8MD' ) modtest=w3sbt8md.o ;;
'W3SBT9MD' ) modtest=w3sbt9md.o ;;
'W3SDB1MD' ) modtest=w3sdb1md.o ;;
Expand Down
1 change: 1 addition & 0 deletions model/bin/switch_itedev_ref1_tr1_setup
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
NOGRB PDLIB METIS TRKNC DIST MPI PR3 UQ FLX0 LN1 ST4 STAB0 NL1 BT5 DB1 TR1 BS0 IC0 IS0 REF1 WNT2 WNX1 CRT1 CRX1 O0 O1 O2 O2a O2b O2c O3 O4 O5 O6 O7 SETUP
4 changes: 4 additions & 0 deletions model/src/cmake/switches.json
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,10 @@
"name": "BT4",
"build_files": ["w3sbt4md.F90"]
},
{
"name": "BT5",
"build_files": ["w3sbt5md.F90"]
},
{
"name": "BT8",
"build_files": ["w3sbt8md.F90"]
Expand Down
32 changes: 31 additions & 1 deletion model/src/w3gdatmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ MODULE W3GDATMD
!/ 15-Apr-2020 : Adds optional opt-out for CFL on BC ( version 7.08 )
!/ 06-May-2021 : Add SMCTYPE, ARCTC options. JGLi ( version 7.12 )
!/ 07-Jun-2021 : the GKE module (NL5, Q. Liu) ( version 7.12 )
!/
!/ 08-Oct-2024 : Rocky bottom friction (A.Roland) ( version 7.14 )
!/
!/ Copyright 2009-2013 National Weather Service (NWS),
!/ National Oceanic and Atmospheric Administration. All rights
Expand Down Expand Up @@ -719,6 +719,9 @@ MODULE W3GDATMD
#ifdef W3_BT4
REAL, POINTER :: SED_D50(:), SED_PSIC(:)
#endif
#ifdef W3_BT5
REAL, POINTER :: SED_D50(:), SED_PSIC(:)
#endif
#ifdef W3_REF1
LOGICAL, POINTER :: RREF(:)
REAL, POINTER :: REFPARS(:)
Expand Down Expand Up @@ -975,6 +978,10 @@ MODULE W3GDATMD
#ifdef W3_BT4
REAL :: SBTCX(10)
#endif
#ifdef W3_BT5
REAL :: SBTCX(10)
#endif

#ifdef W3_BT8
REAL :: DUMMY
#endif
Expand Down Expand Up @@ -1213,6 +1220,9 @@ MODULE W3GDATMD
#ifdef W3_BT4
REAL, POINTER :: SED_D50(:), SED_PSIC(:)
#endif
#ifdef W3_BT5
REAL, POINTER :: SED_D50(:), SED_PSIC(:)
#endif

LOGICAL, POINTER :: GINIT, FLDRY, FLCX, FLCY, FLCTH, FLCK, FLSOU, IICEDISP,&
IICESMOOTH
Expand Down Expand Up @@ -1386,6 +1396,10 @@ MODULE W3GDATMD
#ifdef W3_BT4
REAL, POINTER :: SBTCX(:)
#endif
#ifdef W3_BT5
REAL, POINTER :: SBTCX(:)
#endif

!/
!/ Data aliasses for structure SDBP(S)
!/
Expand Down Expand Up @@ -1757,6 +1771,13 @@ SUBROUTINE W3DIMX ( IMOD, MX, MY, MSEA, NDSE, NDST &
STAT=ISTAT )
CHECK_ALLOC_STATUS ( ISTAT )
#endif
#ifdef W3_BT5
ALLOCATE ( GRIDS(IMOD)%SED_D50(0:MSEA), &
GRIDS(IMOD)%SED_PSIC(0:MSEA),&
STAT=ISTAT )
CHECK_ALLOC_STATUS ( ISTAT )
#endif

!
#ifdef W3_SMC
ALLOCATE ( GRIDS(IMOD)%NLvCel(0:MRLv), &
Expand Down Expand Up @@ -2457,6 +2478,11 @@ SUBROUTINE W3SETG ( IMOD, NDSE, NDST )
SED_D50 => GRIDS(IMOD)%SED_D50
SED_PSIC => GRIDS(IMOD)%SED_PSIC
#endif
#ifdef W3_BT5
SED_D50 => GRIDS(IMOD)%SED_D50
SED_PSIC => GRIDS(IMOD)%SED_PSIC
#endif

!
#ifdef W3_SMC
NLvCel => GRIDS(IMOD)%NLvCel
Expand Down Expand Up @@ -2807,6 +2833,10 @@ SUBROUTINE W3SETG ( IMOD, NDSE, NDST )
#ifdef W3_BT4
SBTCX => MPARS(IMOD)%SBTPS%SBTCX
#endif
#ifdef W3_BT5
SBTCX => MPARS(IMOD)%SBTPS%SBTCX
#endif

!
! Structure SDBPS
!
Expand Down
159 changes: 157 additions & 2 deletions model/src/w3gridmd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,7 @@ MODULE W3GRIDMD
! !/BT1 JONSWAP bottom friction package.
! !/BT4 SHOWEX bottom friction using movable bed roughness
! (Tolman 1994, Ardhuin & al. 2003)
! !/BT5 Rocky bottom friction (Madsen etl al., 1988)
!
! !/IC1 Sink term for interaction with ice (uniform k_i)
! !/IC2 Sink term for under-ice boundary layer friction
Expand Down Expand Up @@ -708,6 +709,13 @@ MODULE W3GRIDMD
REAL :: SED_D50_UNIFORM, SED_DSTAR, RIPFAC1, &
RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, &
BOTROUGHMIN, BOTROUGHFAC
#endif
#ifdef W3_BT5
REAL, ALLOCATABLE :: SED_D50FILE(:,:), SED_POROFILE(:,:)
LOGICAL :: SEDMAPD50
REAL :: SED_D50_UNIFORM, SED_DSTAR, RIPFAC1, &
RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, &
BOTROUGHMIN, BOTROUGHFAC
#endif
!
LOGICAL :: FLLIN, FLINDS, FLNL, FLBT, FLDB, &
Expand Down Expand Up @@ -1065,6 +1073,11 @@ MODULE W3GRIDMD
RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, &
BOTROUGHMIN, BOTROUGHFAC
#endif
#ifdef W3_BT5
NAMELIST /SBT5/ SEDMAPD50, SED_D50_UNIFORM, RIPFAC1, &
RIPFAC2, RIPFAC3, RIPFAC4, SIGDEPTH, &
BOTROUGHMIN, BOTROUGHFAC
#endif
#ifdef W3_DB1
NAMELIST /SDB1/ BJALFA, BJGAM, BJFLAG
#endif
Expand Down Expand Up @@ -1470,6 +1483,9 @@ SUBROUTINE W3GRID()
#ifdef W3_BT4
NRBT = NRBT + 1
#endif
#ifdef W3_BT5
NRBT = NRBT + 1
#endif
#ifdef W3_BT8
NRBT = NRBT + 1
#endif
Expand Down Expand Up @@ -2313,6 +2329,9 @@ SUBROUTINE W3GRID()
#endif
#ifdef W3_BT4
WRITE (NDSO,926)
#endif
#ifdef W3_BT5
WRITE (NDSO,926)
#endif
!
#ifdef W3_BT1
Expand Down Expand Up @@ -2345,6 +2364,29 @@ SUBROUTINE W3GRID()
SBTCX(5)=SIGDEPTH
SBTCX(6)=BOTROUGHMIN
SBTCX(7)=BOTROUGHFAC
#endif
#ifdef W3_BT5
SEDMAPD50=.FALSE.
SED_D50_UNIFORM=2.E-4 ! default grain size: medium sand 200 microns
RIPFAC1=0.4 ! A1 in Ardhuin et al. 2003
RIPFAC2=-2.5 ! A2 in Ardhuin et al. 2003
RIPFAC3=1.2 ! A3 in Ardhuin et al. 2003
RIPFAC4=0.05 ! A4 in Ardhuin et al. 2003
SIGDEPTH=0.05
BOTROUGHMIN=0.01
BOTROUGHFAC=1.00
CALL READNL ( NDSS, 'SBT5', STATUS )
WRITE (NDSO,926) STATUS
WRITE (NDSO,927) SEDMAPD50, SED_D50_UNIFORM, &
RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4,SIGDEPTH, &
BOTROUGHMIN, BOTROUGHFAC
SBTCX(1)=RIPFAC1
SBTCX(2)=RIPFAC2
SBTCX(3)=RIPFAC3
SBTCX(4)=RIPFAC4
SBTCX(5)=SIGDEPTH
SBTCX(6)=BOTROUGHMIN
SBTCX(7)=BOTROUGHFAC
#endif
!
!
Expand Down Expand Up @@ -3312,6 +3354,11 @@ SUBROUTINE W3GRID()
RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4, SIGDEPTH, &
BOTROUGHMIN, BOTROUGHFAC
#endif
#ifdef W3_BT5
WRITE (NDSO,2926) SEDMAPD50, SED_D50_UNIFORM, &
RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4, SIGDEPTH, &
BOTROUGHMIN, BOTROUGHFAC
#endif
#ifdef W3_DB1
IF ( BJFLAG ) THEN
WRITE (NDSO,2928) BJALFA, BJGAM, '.TRUE.'
Expand Down Expand Up @@ -5618,10 +5665,102 @@ SUBROUTINE W3GRID()
! ports, 1997 conference, Christchurch, p149-154, University of Cantebury, NZ
SED_DSTAR=(GRAV*(SED_SG-1)/nu_water**2)**(0.333333)*SED_D50(ISEA)
SED_PSIC(ISEA)=0.3/(1+1.2*SED_DSTAR)+0.55*(1-exp(-0.02*SED_DSTAR))
END DO
END DO
#endif
#ifdef W3_BT5
ALLOCATE ( SED_D50FILE(NX,NY))
IF ( SEDMAPD50 ) THEN


#ifdef W3_BT4
!
! 9.e.1 Info from input file
!
IF (FLGNML) THEN
NDSTR = NML_SED%IDF
VSC = NML_SED%SF
IDLA = NML_SED%IDLA
IDFT = NML_SED%IDFM
RFORM = TRIM(NML_SED%FORMAT)
FROM = TRIM(NML_SED%FROM)
TNAME = TRIM(NML_SED%FILENAME)
ELSE
CALL NEXTLN ( COMSTR , NDSI , NDSE )
READ (NDSI,*,END=2001,ERR=2002) NDSTR, VSC, IDLA, IDFT, RFORM, &
FROM, TNAME
END IF
!
IF ( ABS(VSC) .LT. 1.E-7 ) THEN
VSC = 1.
ELSE
! WARNING TO BE ADDED ...
END IF
IF (IDLA.LT.1 .OR. IDLA.GT.4) IDLA = 1
IF (IDFT.LT.1 .OR. IDFT.GT.3) IDFT = 1
!
WRITE (NDSO,1978) NDSTR, VSC, IDLA, IDFT
IF (IDFT.EQ.2) WRITE (NDSO,973) RFORM
IF (FROM.EQ.'NAME' .AND. NDSG.NE.NDSTR) WRITE (NDSO,974) TNAME
!
! 9.e.2 Open file and check if necessary
!
IF ( NDSTR .EQ. NDSI ) THEN
IF ( IDFT .EQ. 3 ) THEN
WRITE (NDSE,1004) NDSTR
CALL EXTCDE (23)
ELSE
CALL NEXTLN ( COMSTR , NDSI , NDSE )
END IF
ELSE IF ( NDSTR .EQ. NDSG ) THEN
IF ( ( IDFM.EQ.3 .AND. IDFT.NE.3 ) .OR. &
( IDFM.NE.3 .AND. IDFT.EQ.3 ) ) THEN
WRITE (NDSE,1005) IDFM, IDFT
CALL EXTCDE (24)
END IF
ELSE
IF ( IDFT .EQ. 3 ) THEN
IF (FROM.EQ.'NAME') THEN
OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, &
form='UNFORMATTED', convert=file_endian,STATUS='OLD',ERR=2000, &
IOSTAT=IERR)
ELSE
OPEN (NDSTR, form='UNFORMATTED', convert=file_endian, &
STATUS='OLD',ERR=2000,IOSTAT=IERR)
END IF
ELSE
IF (FROM.EQ.'NAME') THEN
OPEN (NDSTR,FILE=TRIM(FNMPRE)//TNAME, &
STATUS='OLD',ERR=2000,IOSTAT=IERR)
ELSE
OPEN (NDSTR, &
STATUS='OLD',ERR=2000,IOSTAT=IERR)
END IF
END IF
END IF
!
! 9.e.3 Read the data
!
CALL INA2R ( SED_D50FILE, NX, NY, 1, NX, 1, NY, NDSTR, NDST, NDSE, &
IDFM, RFORM, IDLA, VSC, VOF)
!
IF ( NDSTR .EQ. NDSI ) CALL NEXTLN ( COMSTR , NDSI , NDSE )
!
WRITE (NDSO,*) 'Min and Max values of kkr :',MINVAL(SED_D50FILE), MAXVAL(SED_D50FILE)
WRITE (NDSO,*)
!
ELSE
SED_D50FILE(:,:)=SED_D50_UNIFORM
END IF
!
DO IY=1, NY
DO IX=1, NX
ISEA = MAPFS (IY,IX)
SED_D50(ISEA) = SED_D50FILE(IX,IY)
SED_D50(ISEA) = MAX(SED_D50(ISEA),1E-5)
! Critical Shields number, Soulsby, R.L. and R J S W Whitehouse
! Threshold of sed. motion in coastal environments, Proc. Pacific Coasts and
! ports, 1997 conference, Christchurch, p149-154, University of Cantebury, NZ
SED_DSTAR=(GRAV*(SED_SG-1)/nu_water**2)**(0.333333)*SED_D50(ISEA)
SED_PSIC(ISEA)=0.3/(1+1.2*SED_DSTAR)+0.55*(1-exp(-0.02*SED_DSTAR))
END DO
END DO
#endif
Expand Down Expand Up @@ -6505,6 +6644,18 @@ SUBROUTINE W3GRID()
', RIPFAC3 =',F8.4,', RIPFAC4 =',F8.4,','/ &
' SIGDEPTH =',F8.4,', BOTROUGHMIN =',F8.4, &
', BOTROUGHFAC =',F4.1,' /')
#endif
#ifdef W3_BT5
926 FORMAT (/' Bottom friction (MADSEN) ',A/ &
' --------------------------------------------------')
927 FORMAT ( ' SEDMAPD50, SED_D50_UNIFORM :',L3,1X,F8.6/ &
' RIPFAC1,RIPFAC2,RIPFAC3,RIPFAC4 :',4F8.4/ &
' SIGDEPTH, BOTROUGHMIN, BOTROUGHFAC:',3F8.4/)
2926 FORMAT ( ' &SBT5 SEDMAPD50 =',L3,', SED_D50_UNIFORM =',F8.6,','/ &
' RIPFAC1 =',F8.4,', RIPFAC2 =',F8.4, &
', RIPFAC3 =',F8.4,', RIPFAC4 =',F8.4,','/ &
' SIGDEPTH =',F8.4,', BOTROUGHMIN =',F8.4, &
', BOTROUGHFAC =',F4.1,' /')
#endif
!
#ifdef W3_DB0
Expand Down Expand Up @@ -7376,6 +7527,10 @@ SUBROUTINE READNL ( NDS, NAME, STATUS )
CASE('SBT4')
READ (NDS,NML=SBT4,END=801,ERR=802,IOSTAT=J)
#endif
#ifdef W3_BT5
CASE('SBT5')
READ (NDS,NML=SBT5,END=801,ERR=802,IOSTAT=J)
#endif
#ifdef W3_IS1
CASE('SIS1')
READ (NDS,NML=SIS1,END=801,ERR=802,IOSTAT=J)
Expand Down
16 changes: 16 additions & 0 deletions model/src/w3iogomd.F90
Original file line number Diff line number Diff line change
Expand Up @@ -835,6 +835,11 @@ SUBROUTINE W3FLDTOIJ(FLD, I, J, IAPROC, NAPOUT, NDSEN)
I = 1
J = 10
#endif
#ifdef W3_BT5
CASE('D50')
I = 1
J = 10
#endif
#ifdef W3_IS2
CASE('IC1')
I = 1
Expand Down Expand Up @@ -3096,6 +3101,13 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD &
WRITE ( NDSOA,* ) 'SED_D50:', SED_D50(1:NSEA)
#endif
#endif
#ifdef W3_BT5
ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN
WRITE ( NDSOG ) SED_D50(1:NSEA)
#ifdef W3_ASCII
WRITE ( NDSOA,* ) 'SED_D50:', SED_D50(1:NSEA)
#endif
#endif
#ifdef W3_IS2
ELSE IF (IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN
WRITE (NDSOG ) ICEH(1:NSEA)
Expand Down Expand Up @@ -3719,6 +3731,10 @@ SUBROUTINE W3IOGO ( INXOUT, NDSOG, IOTST, IMOD &
ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN
READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) SED_D50(1:NSEA)
#endif
#ifdef W3_BT5
ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 10 ) THEN
READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) SED_D50(1:NSEA)
#endif
#ifdef W3_IS2
ELSE IF ( IFI .EQ. 1 .AND. IFJ .EQ. 11 ) THEN
READ (NDSOG,END=801,ERR=802,IOSTAT=IERR) ICEH(1:NSEA)
Expand Down
Loading

0 comments on commit 1cfbe11

Please sign in to comment.